ZGlmZiAtLWdpdCBhL2xpYi9DTWFrZUxpc3RzLnR4dCBiL2xpYi9DTWFrZUxpc3RzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZWMxYTNjCi0tLSAvZGV2L251bGwKKysrIGIvbGliL0NNYWtlTGlzdHMudHh0CkBAIC0wLDAgKzEsMTI0IEBACitzZXQoTElCX05BTUUgbGliY3VybCkKKworY29uZmlndXJlX2ZpbGUoJHtDVVJMX1NPVVJDRV9ESVJ9L2luY2x1ZGUvY3VybC9jdXJsYnVpbGQuaC5jbWFrZQorICAke0NVUkxfQklOQVJZX0RJUn0vaW5jbHVkZS9jdXJsL2N1cmxidWlsZC5oKQorY29uZmlndXJlX2ZpbGUoY3VybF9jb25maWcuaC5jbWFrZQorICAke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vY3VybF9jb25maWcuaCkKKwordHJhbnNmb3JtX21ha2VmaWxlX2luYygiTWFrZWZpbGUuaW5jIiAiJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9L01ha2VmaWxlLmluYy5jbWFrZSIpCitpbmNsdWRlKCR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS9NYWtlZmlsZS5pbmMuY21ha2UpCisKK2xpc3QoQVBQRU5EIEhIRUFERVJTCisgICR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS9jdXJsX2NvbmZpZy5oCisgICR7Q1VSTF9CSU5BUllfRElSfS9pbmNsdWRlL2N1cmwvY3VybGJ1aWxkLmgKKyAgKQorCitpZihNU1ZDKQorICBsaXN0KEFQUEVORCBDU09VUkNFUyBsaWJjdXJsLnJjKQorZW5kaWYoKQorCisjIFNFVChDU09VUkNFUworIyAjICBtZW1kZWJ1Zy5jIC1ub3QgdXNlZAorIyAjIG53bGliLmMgLSBOb3QgdXNlZAorIyAjIHN0cnRvay5jIC0gc3BlY2lmeSBsYXRlcgorIyAjIHN0cnRvb2ZmdC5jIC0gc3BlY2lmeSBsYXRlcgorIyApCisKKyMgIyBpZiB3ZSBoYXZlIEtlcmJlcm9zIDQsIHJpZ2h0IG5vdyB0aGlzIGlzIG5ldmVyIG9uCisjICNPUFRJT04oQ1VSTF9LUkI0ICJVc2UgS2VyYmVyb3MgNCIgT0ZGKQorIyBJRihDVVJMX0tSQjQpCisjIFNFVChDU09VUkNFUyAke0NTT1VSQ0VTfQorIyBrcmI0LmMKKyMgc2VjdXJpdHkuYworIyApCisjIEVORElGKENVUkxfS1JCNCkKKworIyAjT1BUSU9OKENVUkxfTUFMTE9DX0RFQlVHICJEZWJ1ZyBtYWxsb2NzIGluIEN1cmwiIE9GRikKKyMgTUFSS19BU19BRFZBTkNFRChDVVJMX01BTExPQ19ERUJVRykKKyMgSUYoQ1VSTF9NQUxMT0NfREVCVUcpCisjIFNFVChDU09VUkNFUyAke0NTT1VSQ0VTfQorIyBtZW1kZWJ1Zy5jCisjICkKKyMgRU5ESUYoQ1VSTF9NQUxMT0NfREVCVUcpCisKKyMgIyBvbmx5IGJ1aWxkIGNvbXBhdCBzdHJ0b29mZnQgaWYgd2UgbmVlZCB0bworIyBJRihOT1QgSEFWRV9TVFJUT0xMIEFORCBOT1QgSEFWRV9fU1RSVE9JNjQpCisjIFNFVChDU09VUkNFUyAke0NTT1VSQ0VTfQorIyBzdHJ0b29mZnQuYworIyApCisjIEVORElGKE5PVCBIQVZFX1NUUlRPTEwgQU5EIE5PVCBIQVZFX19TVFJUT0k2NCkKKworaWYoSEFWRV9GRUFUVVJFU19IKQorICBzZXRfc291cmNlX2ZpbGVzX3Byb3BlcnRpZXMoCisgICAgY29va2llLmMKKyAgICBlYXN5LmMKKyAgICBmb3JtZGF0YS5jCisgICAgZ2V0ZW52LmMKKyAgICBub25ibG9jay5jCisgICAgaGFzaC5jCisgICAgaHR0cC5jCisgICAgaWYyaXAuYworICAgIG1wcmludGYuYworICAgIG11bHRpLmMKKyAgICBzZW5kZi5jCisgICAgdGVsbmV0LmMKKyAgICB0cmFuc2Zlci5jCisgICAgdXJsLmMKKyAgICBDT01QSUxFX0ZMQUdTIC1EX0JTRF9TT1VSQ0UpCitlbmRpZihIQVZFX0ZFQVRVUkVTX0gpCisKKworIyBUaGUgcmVzdCBvZiB0aGUgYnVpbGQKKworaW5jbHVkZV9kaXJlY3Rvcmllcygke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vLi4vaW5jbHVkZSkKK2luY2x1ZGVfZGlyZWN0b3JpZXMoJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9Ly4uKQoraW5jbHVkZV9kaXJlY3Rvcmllcygke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vLi4vaW5jbHVkZSkKK2luY2x1ZGVfZGlyZWN0b3JpZXMoJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9Ly4uKQoraW5jbHVkZV9kaXJlY3Rvcmllcygke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0pCitpbmNsdWRlX2RpcmVjdG9yaWVzKCR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfSkKK2lmKENVUkxfVVNFX0FSRVMpCisgIGluY2x1ZGVfZGlyZWN0b3JpZXMoJHtDQVJFU19JTkNMVURFX0RJUn0pCitlbmRpZigpCisKK2lmKENVUkxfU1RBVElDTElCKQorICAjIFN0YXRpYyBsaWIKKyAgc2V0KENVUkxfVVNFUl9ERUZJTkVEX0RZTkFNSUNfT1JfU1RBVElDIFNUQVRJQykKK2Vsc2UoKQorICAjIERMTCAvIHNvIGR5bmFtaWMgbGliCisgIHNldChDVVJMX1VTRVJfREVGSU5FRF9EWU5BTUlDX09SX1NUQVRJQyBTSEFSRUQpCitlbmRpZigpCisKK2FkZF9saWJyYXJ5KAorICAke0xJQl9OQU1FfQorICAke0NVUkxfVVNFUl9ERUZJTkVEX0RZTkFNSUNfT1JfU1RBVElDfQorICAke0hIRUFERVJTfSAke0NTT1VSQ0VTfQorICApCisKK3RhcmdldF9saW5rX2xpYnJhcmllcygke0xJQl9OQU1FfSAke0NVUkxfTElCU30pCisKK2lmKFdJTjMyKQorICBhZGRfZGVmaW5pdGlvbnMoIC1EX1VTUkRMTCApCitlbmRpZigpCisKK3NldF90YXJnZXRfcHJvcGVydGllcygke0xJQl9OQU1FfSBQUk9QRVJUSUVTIENPTVBJTEVfREVGSU5JVElPTlMgQlVJTERJTkdfTElCQ1VSTCkKKworc2V0dXBfY3VybF9kZXBlbmRlbmNpZXMoJHtMSUJfTkFNRX0pCisKKyMgUmVtb3ZlIHRoZSAibGliIiBwcmVmaXggc2luY2UgdGhlIGxpYnJhcnkgaXMgYWxyZWFkeSBuYW1lZCAibGliY3VybCIuCitzZXRfdGFyZ2V0X3Byb3BlcnRpZXMoJHtMSUJfTkFNRX0gUFJPUEVSVElFUyBQUkVGSVggIiIpCitzZXRfdGFyZ2V0X3Byb3BlcnRpZXMoJHtMSUJfTkFNRX0gUFJPUEVSVElFUyBJTVBPUlRfUFJFRklYICIiKQorCitpZihNU1ZDKQorICBpZihOT1QgQlVJTERfUkVMRUFTRV9ERUJVR19ESVJTKQorICAgICMgVWdseSB3b3JrYXJvdW5kIHRvIHJlbW92ZSB0aGUgIi9kZWJ1ZyIgb3IgIi9yZWxlYXNlIiBpbiBlYWNoIG91dHB1dAorICAgIHNldF90YXJnZXRfcHJvcGVydGllcygke0xJQl9OQU1FfSBQUk9QRVJUSUVTIFBSRUZJWCAiLi4vIikKKyAgICBzZXRfdGFyZ2V0X3Byb3BlcnRpZXMoJHtMSUJfTkFNRX0gUFJPUEVSVElFUyBJTVBPUlRfUFJFRklYICIuLi8iKQorICBlbmRpZigpCitlbmRpZigpCisKK2lmKFdJTjMyKQorICBpZihOT1QgQ1VSTF9TVEFUSUNMSUIpCisgICAgIyBBZGQgIl9pbXAiIGFzIGEgc3VmZml4IGJlZm9yZSB0aGUgZXh0ZW5zaW9uIHRvIGF2b2lkIGNvbmZsaWN0aW5nIHdpdGggdGhlIHN0YXRpY2FsbHkgbGlua2VkICJsaWJjdXJsLmxpYiIKKyAgICBzZXRfdGFyZ2V0X3Byb3BlcnRpZXMoJHtMSUJfTkFNRX0gUFJPUEVSVElFUyBJTVBPUlRfU1VGRklYICJfaW1wLmxpYiIpCisgIGVuZGlmKCkKK2VuZGlmKCkKZGlmZiAtLWdpdCBhL2xpYi9NYWtlZmlsZS5XYXRjb20gYi9saWIvTWFrZWZpbGUuV2F0Y29tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2MTFiZTYKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvTWFrZWZpbGUuV2F0Y29tCkBAIC0wLDAgKzEsMjIyIEBACisjCisjICBXYXRjb20gLyBPcGVuV2F0Y29tIC8gV2luMzIgbWFrZWZpbGUgZm9yIGxpYmN1cmwuCisjICBHLiBWYW5lbSA8Z3ZhbmVtQGJyb2FkcGFyay5ubz4KKyMKKworIWlmbmRlZiAld2F0Y29tCishZXJyb3IgV0FUQ09NIGVudmlyb25tZW50IHZhcmlhYmxlIG5vdCBzZXQhCishZWxzZQorU1lTX0lOQ0wgPSAtSSQoJXdhdGNvbSlcaFxudCAtSSQoJXdhdGNvbSlcaAorU1lTX0xJQlMgPSAkKCV3YXRjb20pXGxpYjM4NlxudDskKCV3YXRjb20pXGxpYjM4NgorIWVuZGlmCisKKyFpZmRlZiAlbGlibmFtZQorTElCTkFNRSA9ICQoJWxpYm5hbWUpCishZWxzZQorTElCTkFNRSA9IGxpYmN1cmwKKyFlbmRpZgorVEFSR0VUUyA9ICQoTElCTkFNRSkuZGxsICQoTElCTkFNRSlfaW1wLmxpYiAkKExJQk5BTUUpLmxpYgorCitDQyA9IHdjYzM4NgorTEQgPSB3bGluaworQVIgPSB3bGliCitSQyA9IHdyYworCishaWZkZWYgX19MT0FERExMX18KKyEgIGxvYWRkbGwgd2NjMzg2ICB3Y2NkMzg2CishICBsb2FkZGxsIHdwcDM4NiAgd3BwZDM4NgorISAgbG9hZGRsbCB3bGliICAgIHdsaWJkCishICBpZiAkKF9fVkVSU0lPTl9fKSA+IDEyNzAKKyEgICAgbG9hZGRsbCB3bGluayAgIHdsaW5rZAorISAgZWxzZQorISAgICBsb2FkZGxsIHdsaW5rICAgd2xpbmsKKyEgIGVuZGlmCishZW5kaWYKKworIWlmICQoX19WRVJTSU9OX18pIDwgMTI1MCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCitSTSA9IGRlbCAvcSAvZiAyPk5VTAorIWVsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCitSTSA9IHJtIC1mICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyFlbmRpZgorTUQgPSBta2RpcgorUkQgPSBybWRpciAvcSAvcyAyPk5VTAorQ1AgPSBjb3B5CisKK0NGTEFHUyA9IC0zciAtbWYgLWhjIC16ZmYgLXpnZiAtenEgLXptIC16YyAtcyAtZnI9Y29uIC13MiAtZnBpIC1vaWxydGZtICYKKyAgICAgICAgIC13Y2Q9MjAxIC1idD1udCAtZCsgLWRXSU4zMiAtZENVUkxfV0FOVFNfQ0FfQlVORExFX0VOViAgICAgICAgICYKKyAgICAgICAgIC1kQlVJTERJTkdfTElCQ1VSTCAtZEhBVkVfU1BORUdPPTEgLUkuIC1JLi5caW5jbHVkZSAkKFNZU19JTkNMKQorCishaWZkZWYgJWRlYnVnCitERUJVRyAgPSAtZERFQlVHPTEgLWRERUJVR0JVSUxECitDRkxBR1MgKz0gLWQzICQoREVCVUcpCishZWxzZQorQ0ZMQUdTICs9IC1kMAorIWVuZGlmCisKKyFpZmRlZiAldXNlX2lwdjYKK0NGTEFHUyArPSAtZF9XSU4zMl9XSU5OVD0weDA1MDEgLWRFTkFCTEVfSVBWNgorIWVuZGlmCisKKyFpZmRlZiAldXNlX3NzcGkKK0NGTEFHUyArPSAtZFVTRV9XSU5ET1dTX1NTUEkKKyFlbmRpZgorCisjCisjIENoYW5nZSB0byBzdWl0ZS4KKyMKKyFpZmRlZiAlemxpYl9yb290CitaTElCX1JPT1QgPSAkKCV6bGliX3Jvb3QpCishZWxzZQorWkxJQl9ST09UID0gLi5cLi5cemxpYi0xLjIuNQorIWVuZGlmCisKKyFpZmRlZiAlbGlic3NoMl9yb290CitMSUJTU0gyX1JPT1QgPSAkKCVsaWJzc2gyX3Jvb3QpCishZWxzZQorTElCU1NIMl9ST09UID0gLi5cLi5cbGlic3NoMi0xLjIuNworIWVuZGlmCisKKyFpZmRlZiAlbGlicnRtcF9yb290CitMSUJSVE1QX1JPT1QgPSAkKCVsaWJydG1wX3Jvb3QpCishZWxzZQorTElCUlRNUF9ST09UID0gLi5cLi5cbGlicnRtcC0yLjMKKyFlbmRpZgorCishaWZkZWYgJW9wZW5zc2xfcm9vdAorT1BFTlNTTF9ST09UID0gJCglb3BlbnNzbF9yb290KQorIWVsc2UKK09QRU5TU0xfUk9PVCA9IC4uXC4uXG9wZW5zc2wtMC45LjhvCishZW5kaWYKKworIWlmZGVmICVhcmVzX3Jvb3QKK0FSRVNfUk9PVCA9ICQoJWFyZXNfcm9vdCkKKyFlbHNlCitBUkVTX1JPT1QgPSAuLlxhcmVzCishZW5kaWYKKworIWlmZGVmICV1c2VfemxpYgorQ0ZMQUdTICs9IC1kSEFWRV9aTElCX0ggLWRIQVZFX0xJQlogLUkkKFpMSUJfUk9PVCkKKyFlbmRpZgorCishaWZkZWYgJXVzZV9ydG1wCitDRkxBR1MgKz0gLWRVU0VfTElCUlRNUCAtSSQoTElCUlRNUF9ST09UKQorIWVuZGlmCisKKyFpZmRlZiAldXNlX3NzaDIKK0NGTEFHUyArPSAtRFVTRV9MSUJTU0gyIC1ESEFWRV9MSUJTU0gyX0ggLUkkKExJQlNTSDJfUk9PVClcaW5jbHVkZSAtSSQoTElCU1NIMl9ST09UKVx3aW4zMgorIWVuZGlmCisKKyFpZmRlZiAldXNlX3NzbAorQ0ZMQUdTICs9IC13Y2Q9MTM4IC1kVVNFX09QRU5TU0wgLWRVU0VfU1NMRUFZIC1JJChPUEVOU1NMX1JPT1QpXGluYzMyCishZW5kaWYKKworIWlmZGVmICV1c2VfYXJlcworQ0ZMQUdTICs9IC1kVVNFX0FSRVMgLUkkKEFSRVNfUk9PVCkKKyFlbmRpZgorCishaWZkZWYgJXVzZV93YXR0MzIKK0NGTEFHUyArPSAtZFVTRV9XQVRUMzIgLUkkKCV3YXR0X3Jvb3QpXGluYworIWVuZGlmCisKK09CSl9CQVNFID0gV0NfV2luMzIub2JqCitMSU5LX0FSRyA9ICQoT0JKX0JBU0UpXGR5blx3bGluay5hcmcKK0xJQl9BUkcgID0gJChPQkpfQkFTRSlcc3RhdFx3bGliLmFyZworCisjIEluIG9yZGVyIHRvIHByb2Nlc3MgTWFrZWZpbGUuaW5jIHdtYWtlIG11c3QgYmUgY2FsbGVkIHdpdGggLXUgc3dpdGNoIQorIWlmbmRlZiAlTUFLRUZMQUdTCishZXJyb3IgWW91IE1VU1QgY2FsbCB3bWFrZSB3aXRoIHRoZSAtdSBzd2l0Y2ghCishZWxzZQorIWluY2x1ZGUgTWFrZWZpbGUuaW5jCishZW5kaWYKKworT0JKUyA9ICQoQ1NPVVJDRVM6LmM9Lm9iaikKK09CSlMgPSAkT0JKX0RJUlwkKE9CSlM6ID0gJE9CSl9ESVJcKQorCisjCisjIFVzZSAkKE9CSlMpIGFzIGEgdGVtcGxhdGUgdG8gZ2VuZXJhdGUgJChPQkpTX1NUQVQpIGFuZCAkKE9CSlNfRFlOKS4KKyMKK09CSl9ESVIgICAgPSAkKE9CSl9CQVNFKVxzdGF0CitPQkpTX1NUQVQgID0gJCsgJChPQkpTKSAkLQorCitPQkpfRElSICAgID0gJChPQkpfQkFTRSlcZHluCitPQkpTX0RZTiAgID0gJCsgJChPQkpTKSAkLQorCitDVVJMQlVJTERIID0gLi5caW5jbHVkZVxjdXJsXGN1cmxidWlsZC5oCitSRVNPVVJDRSAgID0gJChPQkpfQkFTRSlcZHluXGxpYmN1cmwucmVzCisKK2FsbDogJChDVVJMQlVJTERIKSAkKE9CSl9CQVNFKSAkKFRBUkdFVFMpIC5TWU1CT0xJQworCUBlY2hvIFdlbGNvbWUgdG8gbGliY3VybAorCitjbGVhbjogLlNZTUJPTElDCisJLSQoUk0pICQoT0JKU19TVEFUKQorCS0kKFJNKSAkKE9CSlNfRFlOKQorCS0kKFJNKSAkKFJFU09VUkNFKSAkKExJTktfQVJHKSAkKExJQl9BUkcpCisKK3ZjbGVhbiBkaXN0Y2xlYW46IGNsZWFuIC5TWU1CT0xJQworCS0kKFJNKSAkKFRBUkdFVFMpICQoTElCTkFNRSkubWFwICQoTElCTkFNRSkuc3ltCisJLSQoUkQpICQoT0JKX0JBU0UpXHN0YXQKKwktJChSRCkgJChPQkpfQkFTRSlcZHluCisJLSQoUkQpICQoT0JKX0JBU0UpCisKKyQoT0JKX0JBU0UpOgorCS0kKE1EKSAkXkAKKwktJChNRCkgJF5AXHN0YXQKKwktJChNRCkgJF5AXGR5bgorCiskKENVUkxCVUlMREgpOiAuRVhJU1RTT05MWQorCSQoQ1ApICReQC5kaXN0ICReQAorCiskKExJQk5BTUUpLmRsbDogJChPQkpTX0RZTikgJChSRVNPVVJDRSkgJChMSU5LX0FSRykKKwkkKExEKSBuYW1lICReQCBAJF1ACisKKyQoTElCTkFNRSkubGliOiAkKE9CSlNfU1RBVCkgJChMSUJfQVJHKQorCSQoQVIpIC1xIC1iIC1jICReQCBAJF1ACisKKy5FUkFTRQorJChSRVNPVVJDRSk6IGxpYmN1cmwucmMKKwkkKFJDKSAkKERFQlVHKSAtcSAtciAtem0gLUkuLlxpbmNsdWRlICQoU1lTX0lOQ0wpICRbQCAtZm89JF5ACisKKy5FUkFTRQorLmN7JChPQkpfQkFTRSlcZHlufS5vYmo6CisJJChDQykgJChDRkxBR1MpIC1iZCAtYnIgJFtAIC1mbz0kXkAKKworLkVSQVNFCisuY3skKE9CSl9CQVNFKVxzdGF0fS5vYmo6CisJJChDQykgJChDRkxBR1MpIC1EQ1VSTF9TVEFUSUNMSUIgJFtAIC1mbz0kXkAKKworJChMSU5LX0FSRyk6ICQoX19NQUtFRklMRVNfXykKKwklY3JlYXRlICReQAorCUAlYXBwZW5kICReQCBzeXN0ZW0gbnQgZGxsCisJQCVhcHBlbmQgJF5AIGZpbGUgeyAkKE9CSlNfRFlOKSB9CishaWZkZWYgJWRlYnVnCisJQCVhcHBlbmQgJF5AIGRlYnVnIGFsbAorCUAlYXBwZW5kICReQCBvcHRpb24gc3ltZmlsZQorIWVuZGlmCisJQCVhcHBlbmQgJF5AIG9wdGlvbiBxdWlldCwgbWFwLCBjYXNlZXhhY3QsIGVsaW1pbmF0ZSwgaW1wbGliPSQoTElCTkFNRSlfaW1wLmxpYiwKKwlAJWFwcGVuZCAkXkAgcmVzPSQoUkVTT1VSQ0UpIGxpYnBhdGggJChTWVNfTElCUykKKwlAJWFwcGVuZCAkXkAgbGlicmFyeSB3bGRhcDMyLmxpYgorIWlmZGVmICV1c2Vfd2F0dDMyCisJQCVhcHBlbmQgJF5AIGxpYnJhcnkgJCgld2F0dF9yb290KVxsaWJcd2F0dGNwd19pbXAubGliCishZWxzZQorCUAlYXBwZW5kICReQCBsaWJyYXJ5IHdzMl8zMi5saWIKKyFlbmRpZgorIWlmZGVmICV1c2VfemxpYgorCUAlYXBwZW5kICReQCBsaWJyYXJ5ICQoWkxJQl9ST09UKVx6bGliLmxpYgorIWVuZGlmCishaWZkZWYgJXVzZV9ydG1wCisJQCVhcHBlbmQgJF5AIGxpYnJhcnkgJChMSUJSVE1QX1JPT1QpXGxpYnJ0bXBcbGlicnRtcC5saWIKKyFlbmRpZgorIWlmZGVmICV1c2Vfc3NoMgorCUAlYXBwZW5kICReQCBsaWJyYXJ5ICQoTElCU1NIMl9ST09UKVx3aW4zMlxsaWJzc2gyLmxpYgorIWVuZGlmCishaWZkZWYgJXVzZV9zc2wKKwlAJWFwcGVuZCAkXkAgbGlicmFyeSAkKE9QRU5TU0xfUk9PVClcb3V0MzJcbGliZWF5MzIubGliLCAkKE9QRU5TU0xfUk9PVClcb3V0MzJcc3NsZWF5MzIubGliCishZW5kaWYKKyFpZmRlZiAldXNlX2FyZXMKKwlAJWFwcGVuZCAkXkAgbGlicmFyeSAkKEFSRVNfUk9PVClcY2FyZXMubGliCishZW5kaWYKKworJChMSUJfQVJHKTogJChfX01BS0VGSUxFU19fKQorCSVjcmVhdGUgJF5ACisJQGZvciAlZiBpbiAoJChPQkpTX1NUQVQpKSBkbyBAJWFwcGVuZCAkXkAgKy0gJWYKKwpkaWZmIC0tZ2l0IGEvbGliL01ha2VmaWxlLmFtIGIvbGliL01ha2VmaWxlLmFtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhNjAzMzIKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvTWFrZWZpbGUuYW0KQEAgLTAsMCArMSwxNzUgQEAKKyMqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworIyAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyMgeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworIyBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorIworIyBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyMgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisjIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisjCisjIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyMgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworQVVUT01BS0VfT1BUSU9OUyA9IGZvcmVpZ24gbm9zdGRpbmMKKworRFNQID0gdmM2bGliY3VybC5kc3AKK1ZDUFJPSiA9IGxpYmN1cmwudmNwcm9qCisKK0RPQ1MgPSBSRUFETUUuZW5jb2RpbmcgUkVBRE1FLm1lbW9yeWxlYWsgUkVBRE1FLmFyZXMgUkVBRE1FLmN1cmx4CVwKKyBSRUFETUUuaG9zdGlwIFJFQURNRS5tdWx0aV9zb2NrZXQgUkVBRE1FLmh0dHBhdXRoIFJFQURNRS5waXBlbGluaW5nICAgIFwKKyBSRUFETUUuY3VybF9vZmZfdCBSRUFETUUucGluZ3BvbmcKKworQ01BS0VfRElTVCA9IENNYWtlTGlzdHMudHh0IGN1cmxfY29uZmlnLmguY21ha2UKKworRVhUUkFfRElTVCA9IE1ha2VmaWxlLmIzMiBNYWtlZmlsZS5tMzIgTWFrZWZpbGUudmM2IE1ha2VmaWxlLnJpc2NvcyAkKERTUCkgXAorIHZjNmxpYmN1cmwuZHN3IGNvbmZpZy13aW4zMi5oIGNvbmZpZy13aW4zMmNlLmggY29uZmlnLXJpc2Nvcy5oICAgICAgICAgICAgXAorIGNvbmZpZy1tYWMuaCBjdXJsX2NvbmZpZy5oLmluIG1ha2VmaWxlLmRqIGNvbmZpZy5kb3MgbGliY3VybC5wbGlzdCAgICAgICAgXAorIGxpYmN1cmwucmMgY29uZmlnLWFtaWdhb3MuaCBhbWlnYW9zLmMgYW1pZ2Fvcy5oIG1ha2VmaWxlLmFtaWdhCQkgICBcCisgTWFrZWZpbGUubmV0d2FyZSBud2xpYi5jIG53b3MuYyBsaWJjdXJsLmltcCBtc3ZjcHJvai5oZWFkIG1zdmNwcm9qLmZvb3QgICBcCisgY29uZmlnLXdpbjMyY2UuaCBjb25maWctb3M0MDAuaCBzZXR1cC1vczQwMC5oIGNvbmZpZy1zeW1iaWFuLmgJCSAgIFwKKyBNYWtlZmlsZS5XYXRjb20gY29uZmlnLXRwZi5oICQoRE9DUykgJChWQ1BST0opIG1rLWNhLWJ1bmRsZS5wbAkJICAgXAorIG1rLWNhLWJ1bmRsZS52YnMgZmlyZWZveC1kYjJwZW0uc2ggJChDTUFLRV9ESVNUKSBjb25maWctdnh3b3Jrcy5oCSAgIFwKKyBNYWtlZmlsZS52eHdvcmtzCisKK0NMRUFORklMRVMgPSAkKERTUCkgJChWQ1BST0opCisKK2xpYl9MVExJQlJBUklFUyA9IGxpYmN1cmwubGEKK0xJQkNVUkxfTElCUyA9IEBMSUJDVVJMX0xJQlNACisKKyMgVGhpcyBtaWdodCBob2xkIC1XZXJyb3IKK0NGTEFHUyArPSBAQ1VSTF9DRkxBR19FWFRSQVNACisKKyMgU3BlY2lmeSBvdXIgaW5jbHVkZSBwYXRocyBoZXJlLCBhbmQgZG8gaXQgcmVsYXRpdmUgdG8gJCh0b3Bfc3JjZGlyKSBhbmQKKyMgJCh0b3BfYnVpbGRkaXIpLCB0byBlbnN1cmUgdGhhdCB0aGVzZSBwYXRocyB3aGljaCBiZWxvbmcgdG8gdGhlIGxpYnJhcnkKKyMgYmVpbmcgY3VycmVudGx5IGJ1aWx0IGFuZCB0ZXN0ZWQgYXJlIHNlYXJjaGVkIGJlZm9yZSB0aGUgbGlicmFyeSB3aGljaAorIyBtaWdodCBwb3NzaWJseSBhbHJlYWR5IGJlIGluc3RhbGxlZCBpbiB0aGUgc3lzdGVtLgorIworIyAkKHRvcF9idWlsZGRpcikvaW5jbHVkZS9jdXJsIGZvciBnZW5lcmF0ZWQgY3VybGJ1aWxkLmggaW5jbHVkZWQgZnJvbSBjdXJsLmgKKyMgJCh0b3BfYnVpbGRkaXIpL2luY2x1ZGUgZm9yIGdlbmVyYXRlZCBjdXJsYnVpbGQuaCBpbmNsdWRlZCBmcm9tIGxpYi9zZXR1cC5oCisjICQodG9wX3NyY2RpcikvaW5jbHVkZSBpcyBmb3IgbGliY3VybCdzIGV4dGVybmFsIGluY2x1ZGUgZmlsZXMKKyMgJCh0b3BfYnVpbGRkaXIpL2xpYiBpcyBmb3IgbGliY3VybCdzIGdlbmVyYXRlZCBsaWIvY3VybF9jb25maWcuaCBmaWxlCisjICQodG9wX3NyY2RpcikvbGliIGlzIGZvciBsaWJjdXJsJ3MgbGliL3NldHVwLmggYW5kIG90aGVyICJwcml2YXRlIiBmaWxlcworIyAkKHRvcF9idWlsZGRpcikvYXJlcyBpcyBmb3IgaW4tdHJlZSBjLWFyZXMncyBnZW5lcmF0ZWQgYXJlc19idWlsZC5oIGZpbGUKKyMgJCh0b3Bfc3JjZGlyKS9hcmVzIGlzIGZvciBpbi10cmVlIGMtYXJlcydzIGV4dGVybmFsIGluY2x1ZGUgZmlsZXMKKworaWYgVVNFX0VNQkVEREVEX0FSRVMKK0lOQ0xVREVTID0gLUkkKHRvcF9idWlsZGRpcikvaW5jbHVkZS9jdXJsIFwKKyAgICAgICAgICAgLUkkKHRvcF9idWlsZGRpcikvaW5jbHVkZSAgICAgIFwKKyAgICAgICAgICAgLUkkKHRvcF9zcmNkaXIpL2luY2x1ZGUgICAgICAgIFwKKyAgICAgICAgICAgLUkkKHRvcF9idWlsZGRpcikvbGliICAgICAgICAgIFwKKyAgICAgICAgICAgLUkkKHRvcF9zcmNkaXIpL2xpYiAgICAgICAgICAgIFwKKyAgICAgICAgICAgLUkkKHRvcF9idWlsZGRpcikvYXJlcyAgICAgICAgIFwKKyAgICAgICAgICAgLUkkKHRvcF9zcmNkaXIpL2FyZXMKK2Vsc2UKK0lOQ0xVREVTID0gLUkkKHRvcF9idWlsZGRpcikvaW5jbHVkZS9jdXJsIFwKKyAgICAgICAgICAgLUkkKHRvcF9idWlsZGRpcikvaW5jbHVkZSAgICAgIFwKKyAgICAgICAgICAgLUkkKHRvcF9zcmNkaXIpL2luY2x1ZGUgICAgICAgIFwKKyAgICAgICAgICAgLUkkKHRvcF9idWlsZGRpcikvbGliICAgICAgICAgIFwKKyAgICAgICAgICAgLUkkKHRvcF9zcmNkaXIpL2xpYgorZW5kaWYKKworaWYgU09OQU1FX0JVTVAKKyMKKyMgQnVtcGluZyBvZiBTT05BTUUgY29uZGl0aW9uYWxseSBtYXkgc2VlbSBsaWtlIGEgd2VpcmQgdGhpbmcgdG8gZG8sIGFuZCB5ZWFoCisjIGl0IGlzLiBUaGUgcHJvYmxlbSBpcyB0aGF0IHdlIHRyeSB0byBhdm9pZCB0aGUgYnVtcCBhcyBoYXJkIGFzIHBvc3NpYmxlLCBidXQKKyMgeWV0IGl0IGlzIHN0aWxsIG5lY2Vzc2FyeSBmb3IgYSBmZXcgcmFyZSBzaXR1YXRpb25zLiBUaGUgY29uZmlndXJlIHNjcmlwdCB3aWxsCisjIGF0dGVtcHQgdG8gZmlndXJlIG91dCB0aGVzZSBzaXR1YXRpb25zLCBhbmQgaXQgY2FuIGJlIGZvcmNlZCB0byBjb25zaWRlciB0aGlzCisjIHRvIGJlIHN1Y2ggYSBjYXNlISBTZWUgUkVBRE1FLmN1cmxfb2ZmX3QgZm9yIGZ1cnRoZXIgZGV0YWlscy4KKyMKKyMgVGhpcyBjb25kaXRpb25hbCBzb25hbWUgYnVtcCBTSE9VTEQgYmUgcmVtb3ZlZCBhdCBuZXh0ICJwcm9wZXIiIGJ1bXAuCisjCitWRVJTSU9OSU5GTz0tdmVyc2lvbi1pbmZvIDc6MDoyCitlbHNlCitWRVJTSU9OSU5GTz0tdmVyc2lvbi1pbmZvIDY6MDoyCitlbmRpZgorCisjIFRoaXMgZmxhZyBhY2NlcHRzIGFuIGFyZ3VtZW50IG9mIHRoZSBmb3JtIGN1cnJlbnRbOnJldmlzaW9uWzphZ2VdXS4gU28sCisjIHBhc3NpbmcgLXZlcnNpb24taW5mbyAzOjEyOjEgc2V0cyBjdXJyZW50IHRvIDMsIHJldmlzaW9uIHRvIDEyLCBhbmQgYWdlIHRvCisjIDEuCisjCisjIEhlcmUncyB0aGUgc2ltcGxpZmllZCBydWxlIGd1aWRlIG9uIGhvdyB0byBjaGFuZ2UgLXZlcnNpb24taW5mbzoKKyMgKGN1cnJlbnQgdmVyc2lvbiBpcyBDOlI6QSkKKyMKKyMgMS4gaWYgdGhlcmUgYXJlIG9ubHkgc291cmNlIGNoYW5nZXMsIHVzZSBDOlIrMTpBCisjIDIuIGlmIGludGVyZmFjZXMgd2VyZSBhZGRlZCB1c2UgQysxOjA6QSsxCisjIDMuIGlmIGludGVyZmFjZXMgd2VyZSByZW1vdmVkLCB0aGVuIHVzZSBDKzE6MDowCisjCisjIEZvciB0aGUgZnVsbCBndWlkZSBvbiBsaWJjdXJsIEFCSSBydWxlcywgc2VlIGRvY3MvbGliY3VybC9BQkkKKworaWYgTk9fVU5ERUZJTkVECisjIFRoZSAtbm8tdW5kZWZpbmVkIGZsYWcgaXMgQ1JVQ0lBTCBmb3IgdGhpcyB0byBidWlsZCBmaW5lIG9uIEN5Z3dpbi4KK1VOREVGID0gLW5vLXVuZGVmaW5lZAorZW5kaWYKKworaWYgTUlNUFVSRQorIyBUaGlzIGlzIGZvciBnY2Mgb24gU29sYXJpcyAoOCsgPykgdG8gYXZvaWQgInJlbG9jYXRpb25zIHJlbWFpbiBhZ2FpbnN0CisjIGFsbG9jYXRhYmxlIGJ1dCBub24td3JpdGFibGUgc2VjdGlvbnMiIHByb2JsZW1zLgorTUlNUFVSRSA9IC1taW1wdXJlLXRleHQKK2VuZGlmCisKK2xpYmN1cmxfbGFfTERGTEFHUyA9ICQoVU5ERUYpICQoVkVSU0lPTklORk8pICQoTUlNUFVSRSkgJChMSUJDVVJMX0xJQlMpCisKKyMgTWFrZWZpbGUuaW5jIHByb3ZpZGVzIHRoZSBDU09VUkNFUyBhbmQgSEhFQURFUlMgZGVmaW5lcworaW5jbHVkZSBNYWtlZmlsZS5pbmMKKworbGliY3VybF9sYV9TT1VSQ0VTID0gJChDU09VUkNFUykgJChISEVBREVSUykKKworV0lOMzJTT1VSQ0VTID0gJChDU09VUkNFUykKK1dJTjMySEVBREVSUyA9ICQoSEhFQURFUlMpIGNvbmZpZy13aW4zMi5oCisKK0RTUE9VVCA9IHwgYXdrICd7cHJpbnRmKCIlc1xyXG4iLCAkJDApfScgPj4gJChEU1ApCitWQ1BST0pPVVQgPSB8IGF3ayAne3ByaW50ZigiJXNcclxuIiwgJCQwKX0nID4+ICQoVkNQUk9KKQorCiskKERTUCk6IG1zdmNwcm9qLmhlYWQgbXN2Y3Byb2ouZm9vdCBNYWtlZmlsZS5hbQorCWVjaG8gImNyZWF0aW5nICQoRFNQKSIKKwlAKGNwICQoc3JjZGlyKS9tc3ZjcHJvai5oZWFkICQoRFNQKTsgXAorCWVjaG8gIiMgQmVnaW4gR3JvdXAgXCJTb3VyY2UgRmlsZXNcIiIgJChEU1BPVVQpOyBcCisgICAgICAgIGVjaG8gIiIgJChEU1BPVVQpOyBcCisgICAgICAgIGVjaG8gIiMgUFJPUCBEZWZhdWx0X0ZpbHRlciBcIlwiIiAkKERTUE9VVCk7IFwKKyAgICAgICAgd2luMzJfc3Jjcz0nJChXSU4zMlNPVVJDRVMpJzsgXAorICAgICAgICBzb3J0ZWRfc3Jjcz1gZm9yIGZpbGUgaW4gJCR3aW4zMl9zcmNzOyBkbyBlY2hvICQkZmlsZTsgZG9uZSB8IHNvcnRgOyBcCisgICAgICAgIGZvciBmaWxlIGluICQkc29ydGVkX3NyY3M7IGRvIFwKKwllY2hvICIjIEJlZ2luIFNvdXJjZSBGaWxlIiAkKERTUE9VVCk7IFwKKwllY2hvICIiICQoRFNQT1VUKTsgXAorCWVjaG8gIlNPVVJDRT0uXFwiJCRmaWxlICQoRFNQT1VUKTsgXAorCWVjaG8gIiMgRW5kIFNvdXJjZSBGaWxlIiAkKERTUE9VVCk7IFwKKwlkb25lOyBcCisJZWNobyAiIyBFbmQgR3JvdXAiICQoRFNQT1VUKTsgXAorCWVjaG8gIiMgQmVnaW4gR3JvdXAgXCJIZWFkZXIgRmlsZXNcIiIgJChEU1BPVVQpOyBcCisgICAgICAgIGVjaG8gIiIgJChEU1BPVVQpOyBcCisgICAgICAgIGVjaG8gIiMgUFJPUCBEZWZhdWx0X0ZpbHRlciBcIlwiIiAkKERTUE9VVCk7IFwKKyAgICAgICAgd2luMzJfaGRycz0nJChXSU4zMkhFQURFUlMpJzsgXAorICAgICAgICBzb3J0ZWRfaGRycz1gZm9yIGZpbGUgaW4gJCR3aW4zMl9oZHJzOyBkbyBlY2hvICQkZmlsZTsgZG9uZSB8IHNvcnRgOyBcCisgICAgICAgIGZvciBmaWxlIGluICQkc29ydGVkX2hkcnM7IGRvIFwKKwllY2hvICIjIEJlZ2luIFNvdXJjZSBGaWxlIiAkKERTUE9VVCk7IFwKKwllY2hvICIiICQoRFNQT1VUKTsgXAorCWVjaG8gIlNPVVJDRT0uXFwiJCRmaWxlICQoRFNQT1VUKTsgXAorCWVjaG8gIiMgRW5kIFNvdXJjZSBGaWxlIiAkKERTUE9VVCk7IFwKKwlkb25lOyBcCisJZWNobyAiIyBFbmQgR3JvdXAiICQoRFNQT1VUKTsgXAorCWNhdCAkKHNyY2RpcikvbXN2Y3Byb2ouZm9vdCAkKERTUE9VVCkgKQorCiskKFZDUFJPSik6IHZjOHByb2ouaGVhZCB2Yzhwcm9qLmZvb3QgTWFrZWZpbGUuYW0KKwllY2hvICJjcmVhdGluZyAkKFZDUFJPSikiCisJQChjcCAkKHNyY2RpcikvdmM4cHJvai5oZWFkICQoVkNQUk9KKTsgXAorICAgICAgICB3aW4zMl9zcmNzPSckKFdJTjMyU09VUkNFUyknOyBcCisgICAgICAgIHNvcnRlZF9zcmNzPWBmb3IgZmlsZSBpbiAkJHdpbjMyX3NyY3M7IGRvIGVjaG8gJCRmaWxlOyBkb25lIHwgc29ydGA7IFwKKyAgICAgICAgZm9yIGZpbGUgaW4gJCRzb3J0ZWRfc3JjczsgZG8gXAorCWVjaG8gIjxGaWxlIFJlbGF0aXZlUGF0aD1cIiIkJGZpbGUiXCI+PC9GaWxlPiIgJChWQ1BST0pPVVQpOyBcCisJZG9uZTsgXAorCWVjaG8gIjwvRmlsdGVyPjxGaWx0ZXIJTmFtZT1cIkhlYWRlciBGaWxlc1wiPiIgJChWQ1BST0pPVVQpOyBcCisgICAgICAgIHdpbjMyX2hkcnM9JyQoV0lOMzJIRUFERVJTKSc7IFwKKyAgICAgICAgc29ydGVkX2hkcnM9YGZvciBmaWxlIGluICQkd2luMzJfaGRyczsgZG8gZWNobyAkJGZpbGU7IGRvbmUgfCBzb3J0YDsgXAorICAgICAgICBmb3IgZmlsZSBpbiAkJHNvcnRlZF9oZHJzOyBkbyBcCisJZWNobyAiPEZpbGUgUmVsYXRpdmVQYXRoPVwiIiQkZmlsZSJcIj48L0ZpbGU+IiAkKFZDUFJPSk9VVCk7IFwKKwlkb25lOyBcCisJY2F0ICQoc3JjZGlyKS92Yzhwcm9qLmZvb3QgJChWQ1BST0pPVVQpICkKZGlmZiAtLWdpdCBhL2xpYi9NYWtlZmlsZS5iMzIgYi9saWIvTWFrZWZpbGUuYjMyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwOWFlMjcKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvTWFrZWZpbGUuYjMyCkBAIC0wLDAgKzEsODkgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIworIyAgTWFrZWZpbGUuYjMyIC0gQm9ybGFuZCdzIEMrKyBDb21waWxlciA1LlgKKyMKKyMgICdsaWInIGRpcmVjdG9yeQorIworIyAgJ0JDQ0RJUicgaGFzIHRvIGJlIHNldCB1cCB0byBwb2ludCB0byB0aGUgYmFzZSBkaXJlY3RvcnkKKyMgIG9mIHRoZSBjb21waWxlciwgaS5lLiBTRVQgQkNDRElSID0gYzpcQm9ybGFuZFxCQ0M1NQorIyAgd2hlcmUgYzpcQm9ybGFuZFxCQ0M1NSBpcyB0aGUgY29tcGlsZXIgaXMgaW5zdGFsbGVkCisjCisjICBXcml0dGVuIGJ5IEphZXBpbCBLaW0sIHBpdEBwYXJhZGlzZS5uZXQubnoKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIEVkaXQgdGhlIHBhdGggYmVsb3cgdG8gcG9pbnQgdG8gdGhlIGJhc2Ugb2YgeW91ciBabGliIHNvdXJjZXMuCishaWZuZGVmIFpMSUJfUEFUSAorWkxJQl9QQVRIID0gLi4vLi4vemxpYi0xLjIuMQorIWVuZGlmCisKKyMgRWRpdCB0aGUgcGF0aCBiZWxvdyB0byBwb2ludCB0byB0aGUgYmFzZSBvZiB5b3VyIE9wZW5TU0wgcGFja2FnZS4KKyFpZm5kZWYgT1BFTlNTTF9QQVRICitPUEVOU1NMX1BBVEggPSAuLi8uLi9vcGVuc3NsLTAuOS43ZAorIWVuZGlmCisKKyMgU2V0IGxpYmN1cmwgc3RhdGljIGxpYiwgZGxsIGFuZCBpbXBvcnQgbGliCitMSUJDVVJMX0xJQiAgICA9IGxpYmN1cmwubGliCitMSUJDVVJMX0RMTCAgICA9IGxpYmN1cmwuZGxsCitMSUJDVVJMX0lNUExJQiA9IGxpYmN1cmxfaW1wLmxpYgorCisjIFNldHVwIGVudmlyb25tZW50CitDWFggICAgICA9IGJjYzMyCitMRCAgICAgICA9IGJjYzMyCitDUCAgICAgICA9IGNvcHkKK1JNICAgICAgID0gZGVsCitMSUIgICAgICA9IHRsaWIKK0lNUExJQiAgID0gaW1wbGliCisKK0NYWEZMQUdTID0gLXEgLTUgLU8yIC13LWF1cyAtdy1jY2MgLXctY3N1IC13LXBhciAtdy1waWEgLXctcmNoIC13LWlubCAtdy1uZ3UgLXctcHJvIC10V00KK0xJQkZMQUdTID0gL0MgL1AzMgorTERGTEFHUyAgPSAtcSAtbHEgLWxhYSAtdFdECisKK0lOQ0RJUlMgID0gLUkuOy4uL2luY2x1ZGUKK0xJTktMSUIgID0gJChCQ0NESVIpL2xpYi9jdzMybXQubGliCisKKyMgSWYgeW91IGJ1aWxkIHdpdGggU1NMIHN1cHBvcnQsIHNldCBXSVRIX1NTTD0xCitERUZJTkVTICA9IC1ETkRFQlVHIC1EV0lOMzIgLURfQ09OU09MRSAtRF9NQkNTIC1EQlVJTERJTkdfTElCQ1VSTAorCishaWZkZWYgV0lUSF9aTElCCitERUZJTkVTICA9ICQoREVGSU5FUykgLURIQVZFX0xJQlogLURIQVZFX1pMSUJfSAorSU5DRElSUyAgPSAkKElOQ0RJUlMpOyQoWkxJQl9QQVRIKQorTElOS0xJQiAgPSAkKExJTktMSUIpICQoWkxJQl9QQVRIKS96bGliLmxpYgorIWVuZGlmCisKKyFpZmRlZiBXSVRIX1NTTAorREVGSU5FUyAgPSAkKERFRklORVMpIC1EVVNFX1NTTEVBWQorSU5DRElSUyAgPSAkKElOQ0RJUlMpOyQoT1BFTlNTTF9QQVRIKS9pbmMzMjskKE9QRU5TU0xfUEFUSCkvaW5jMzIvb3BlbnNzbAorTElOS0xJQiAgPSAkKExJTktMSUIpICQoT1BFTlNTTF9QQVRIKS9vdXQzMi9zc2xlYXkzMi5saWIgJChPUEVOU1NMX1BBVEgpL291dDMyL2xpYmVheTMyLmxpYgorIWVuZGlmCisKKy5hdXRvZGVwZW5kCisKKyMgTWFrZWZpbGUuaW5jIHByb3ZpZGVzIHRoZSBDU09VUkNFUyBhbmQgSEhFQURFUlMgZGVmaW5lcworIWluY2x1ZGUgTWFrZWZpbGUuaW5jCisKK09CSkVDVFMgPSAkKENTT1VSQ0VTOi5jPS5vYmopCisKKy5jLm9iajoKKwkkKENYWCkgLWMgJChJTkNESVJTKSAkKENYWEZMQUdTKSAkKERFRklORVMpICQ8CisKK2FsbDoJJChMSUJDVVJMX0xJQikgJChMSUJDVVJMX0RMTCkKKworY2xlYW46CisJLSQoUk0pICQoTElCQ1VSTF9MSUIpCisJLSQoUk0pICQoTElCQ1VSTF9JTVBMSUIpCisJLSQoUk0pIGxpYmN1cmwudGRzCisJLSQoUk0pICoub2JqCisKKyQoTElCQ1VSTF9MSUIpOiAkKE9CSkVDVFMpCisJQC0kKFJNKSAkQAorCSQoTElCKSAkKExJQkZMQUdTKSAkQCBAJiYhCisrJCgqKjogPSAmXgorKykKKyEKKworJChMSUJDVVJMX0RMTCkgJChMSUJDVVJMX0lNUExJQik6ICQoT0JKRUNUUykgJChMSU5LTElCKQorCUAtJChSTSkgJChMSUJDVVJMX0RMTCkKKwlALSQoUk0pICQoTElCQ1VSTF9JTVBMSUIpCisJJChMRCkgJChMREZMQUdTKSAtZSQoTElCQ1VSTF9ETEwpICQqKgorCSQoSU1QTElCKSAkKExJQkNVUkxfSU1QTElCKSAkKExJQkNVUkxfRExMKQorCmRpZmYgLS1naXQgYS9saWIvTWFrZWZpbGUuaW4gYi9saWIvTWFrZWZpbGUuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTRiZWViZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9NYWtlZmlsZS5pbgpAQCAtMCwwICsxLDg2NSBAQAorIyBNYWtlZmlsZS5pbiBnZW5lcmF0ZWQgYnkgYXV0b21ha2UgMS45LjYgZnJvbSBNYWtlZmlsZS5hbS4KKyMgQGNvbmZpZ3VyZV9pbnB1dEAKKworIyBDb3B5cmlnaHQgKEMpIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsCisjIDIwMDMsIDIwMDQsIDIwMDUgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyBUaGlzIE1ha2VmaWxlLmluIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKyMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFksIHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGxhdzsgd2l0aG91dAorIyBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBCisjIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKworQFNFVF9NQUtFQAorCisjIC4vbGliL01ha2VmaWxlLmluYworIyBVc2luZyB0aGUgYmFja3NsYXNoIGFzIGxpbmUgY29udGludWF0aW9uIGNoYXJhY3RlciBtaWdodCBiZSBwcm9ibGVtYXRpYworIyB3aXRoIHNvbWUgbWFrZSBmbGF2b3VycywgYXMgV2F0Y29tJ3Mgd21ha2Ugc2hvd2VkIHVzIGFscmVhZHkuIElmIHdlCisjIGV2ZXIgd2FudCB0byBjaGFuZ2UgdGhpcyBpbiBhIHBvcnRhYmxlIG1hbm5lciB0aGVuIHdlIHNob3VsZCBjb25zaWRlcgorIyB0aGlzIGlkZWEgKHBvc3RlZCB0byB0aGUgbGliY3VybCBsaXN0IGJ5IEFkYW0gS2VsbGFzKToKKyMgQ1NSQzEgPSBmaWxlMS5jIGZpbGUyLmMgZmlsZTMuYworIyBDU1JDMiA9IGZpbGU0LmMgZmlsZTUuYyBmaWxlNi5jCisjIENTT1VSQ0VTID0gJChDU1JDMSkgJChDU1JDMikKKworc3JjZGlyID0gQHNyY2RpckAKK3RvcF9zcmNkaXIgPSBAdG9wX3NyY2RpckAKK1ZQQVRIID0gQHNyY2RpckAKK3BrZ2RhdGFkaXIgPSAkKGRhdGFkaXIpL0BQQUNLQUdFQAorcGtnbGliZGlyID0gJChsaWJkaXIpL0BQQUNLQUdFQAorcGtnaW5jbHVkZWRpciA9ICQoaW5jbHVkZWRpcikvQFBBQ0tBR0VACit0b3BfYnVpbGRkaXIgPSAuLgorYW1fX2NkID0gQ0RQQVRIPSIkJHtaU0hfVkVSU0lPTisufSQoUEFUSF9TRVBBUkFUT1IpIiAmJiBjZAorSU5TVEFMTCA9IEBJTlNUQUxMQAoraW5zdGFsbF9zaF9EQVRBID0gJChpbnN0YWxsX3NoKSAtYyAtbSA2NDQKK2luc3RhbGxfc2hfUFJPR1JBTSA9ICQoaW5zdGFsbF9zaCkgLWMKK2luc3RhbGxfc2hfU0NSSVBUID0gJChpbnN0YWxsX3NoKSAtYworSU5TVEFMTF9IRUFERVIgPSAkKElOU1RBTExfREFUQSkKK3RyYW5zZm9ybSA9ICQocHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSkKK05PUk1BTF9JTlNUQUxMID0gOgorUFJFX0lOU1RBTEwgPSA6CitQT1NUX0lOU1RBTEwgPSA6CitOT1JNQUxfVU5JTlNUQUxMID0gOgorUFJFX1VOSU5TVEFMTCA9IDoKK1BPU1RfVU5JTlNUQUxMID0gOgorYnVpbGRfdHJpcGxldCA9IEBidWlsZEAKK2hvc3RfdHJpcGxldCA9IEBob3N0QAorRElTVF9DT01NT04gPSAkKHNyY2RpcikvTWFrZWZpbGUuYW0gJChzcmNkaXIpL01ha2VmaWxlLmluIFwKKwkkKHNyY2RpcikvTWFrZWZpbGUuaW5jICQoc3JjZGlyKS9jdXJsX2NvbmZpZy5oLmluCitzdWJkaXIgPSBsaWIKK0FDTE9DQUxfTTQgPSAkKHRvcF9zcmNkaXIpL2FjbG9jYWwubTQKK2FtX19hY2xvY2FsX200X2RlcHMgPSAkKHRvcF9zcmNkaXIpL200L2N1cmwtY29tcGlsZXJzLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2N1cmwtY29uZm9wdHMubTQgXAorCSQodG9wX3NyY2RpcikvbTQvY3VybC1mdW5jdGlvbnMubTQgXAorCSQodG9wX3NyY2RpcikvbTQvY3VybC1vdmVycmlkZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9jdXJsLXJlZW50cmFudC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9jdXJsLXN5c3RlbS5tNCAkKHRvcF9zcmNkaXIpL200L2xpYnRvb2wubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbHRvcHRpb25zLm00ICQodG9wX3NyY2RpcikvbTQvbHRzdWdhci5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9sdHZlcnNpb24ubTQgJCh0b3Bfc3JjZGlyKS9tNC9sdH5vYnNvbGV0ZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9hY2luY2x1ZGUubTQgJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUuYWMKK2FtX19jb25maWd1cmVfZGVwcyA9ICQoYW1fX2FjbG9jYWxfbTRfZGVwcykgJChDT05GSUdVUkVfREVQRU5ERU5DSUVTKSBcCisJJChBQ0xPQ0FMX000KQorbWtpbnN0YWxsZGlycyA9ICQoU0hFTEwpICQodG9wX3NyY2RpcikvbWtpbnN0YWxsZGlycworQ09ORklHX0hFQURFUiA9IGN1cmxfY29uZmlnLmggJCh0b3BfYnVpbGRkaXIpL3NyYy9jdXJsX2NvbmZpZy5oIFwKKwkkKHRvcF9idWlsZGRpcikvaW5jbHVkZS9jdXJsL2N1cmxidWlsZC5oCitDT05GSUdfQ0xFQU5fRklMRVMgPQorYW1fX3ZwYXRoX2Fkal9zZXR1cCA9IHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzfC58LnxnJ2A7CithbV9fdnBhdGhfYWRqID0gY2FzZSAkJHAgaW4gXAorICAgICQoc3JjZGlyKS8qKSBmPWBlY2hvICIkJHAiIHwgc2VkICJzfF4kJHNyY2RpcnN0cmlwL3x8ImA7OyBcCisgICAgKikgZj0kJHA7OyBcCisgIGVzYWM7CithbV9fc3RyaXBfZGlyID0gYGVjaG8gJCRwIHwgc2VkIC1lICdzfF4uKi98fCdgOworYW1fX2luc3RhbGxkaXJzID0gIiQoREVTVERJUikkKGxpYmRpcikiCitsaWJMVExJQlJBUklFU19JTlNUQUxMID0gJChJTlNUQUxMKQorTFRMSUJSQVJJRVMgPSAkKGxpYl9MVExJQlJBUklFUykKK2xpYmN1cmxfbGFfTElCQUREID0KK2FtX19vYmplY3RzXzEgPSBmaWxlLmxvIHRpbWV2YWwubG8gYmFzZTY0LmxvIGhvc3RpcC5sbyBwcm9ncmVzcy5sbyBcCisJZm9ybWRhdGEubG8gY29va2llLmxvIGh0dHAubG8gc2VuZGYubG8gZnRwLmxvIHVybC5sbyBkaWN0LmxvIFwKKwlpZjJpcC5sbyBzcGVlZGNoZWNrLmxvIGxkYXAubG8gc3NsdXNlLmxvIHZlcnNpb24ubG8gZ2V0ZW52LmxvIFwKKwllc2NhcGUubG8gbXByaW50Zi5sbyB0ZWxuZXQubG8gbmV0cmMubG8gZ2V0aW5mby5sbyB0cmFuc2Zlci5sbyBcCisJc3RyZXF1YWwubG8gZWFzeS5sbyBzZWN1cml0eS5sbyBrcmI0LmxvIGN1cmxfZm5tYXRjaC5sbyBcCisJZmlsZWluZm8ubG8gZnRwbGlzdHBhcnNlci5sbyB3aWxkY2FyZC5sbyBrcmI1LmxvIG1lbWRlYnVnLmxvIFwKKwlodHRwX2NodW5rcy5sbyBzdHJ0b2subG8gY29ubmVjdC5sbyBsbGlzdC5sbyBoYXNoLmxvIG11bHRpLmxvIFwKKwljb250ZW50X2VuY29kaW5nLmxvIHNoYXJlLmxvIGh0dHBfZGlnZXN0LmxvIG1kNC5sbyBtZDUubG8gXAorCWN1cmxfcmFuZC5sbyBodHRwX25lZ290aWF0ZS5sbyBodHRwX250bG0ubG8gaW5ldF9wdG9uLmxvIFwKKwlzdHJ0b29mZnQubG8gc3RyZXJyb3IubG8gaG9zdGFyZXMubG8gaG9zdGFzeW4ubG8gaG9zdGlwNC5sbyBcCisJaG9zdGlwNi5sbyBob3N0c3luLmxvIGhvc3R0aHJlLmxvIGluZXRfbnRvcC5sbyBwYXJzZWRhdGUubG8gXAorCXNlbGVjdC5sbyBndGxzLmxvIHNzbGdlbi5sbyB0ZnRwLmxvIHNwbGF5LmxvIHN0cmR1cC5sbyBcCisJc29ja3MubG8gc3NoLmxvIG5zcy5sbyBxc3NsLmxvIHJhd3N0ci5sbyBjdXJsX2FkZHJpbmZvLmxvIFwKKwlzb2Nrc19nc3NhcGkubG8gc29ja3Nfc3NwaS5sbyBjdXJsX3NzcGkubG8gc2xpc3QubG8gXAorCW5vbmJsb2NrLmxvIGN1cmxfbWVtcmNoci5sbyBpbWFwLmxvIHBvcDMubG8gc210cC5sbyBcCisJcGluZ3BvbmcubG8gcnRzcC5sbyBjdXJsX3RocmVhZHMubG8gd2Fybmxlc3MubG8gaG1hYy5sbyBcCisJcG9sYXJzc2wubG8gY3VybF9ydG1wLmxvIG9wZW5sZGFwLmxvIGN1cmxfZ2V0aG9zdG5hbWUubG8gXAorCWdvcGhlci5sbworYW1fX29iamVjdHNfMiA9CithbV9saWJjdXJsX2xhX09CSkVDVFMgPSAkKGFtX19vYmplY3RzXzEpICQoYW1fX29iamVjdHNfMikKK2xpYmN1cmxfbGFfT0JKRUNUUyA9ICQoYW1fbGliY3VybF9sYV9PQkpFQ1RTKQorREVGQVVMVF9JTkNMVURFUyA9IAorZGVwY29tcCA9ICQoU0hFTEwpICQodG9wX3NyY2RpcikvZGVwY29tcAorYW1fX2RlcGZpbGVzX21heWJlID0gZGVwZmlsZXMKK0NPTVBJTEUgPSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgXAorCSQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykKK0xUQ09NUElMRSA9ICQoTElCVE9PTCkgLS10YWc9Q0MgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSBcCisJJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSBcCisJJChBTV9DRkxBR1MpICQoQ0ZMQUdTKQorQ0NMRCA9ICQoQ0MpCitMSU5LID0gJChMSUJUT09MKSAtLXRhZz1DQyAtLW1vZGU9bGluayAkKENDTEQpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgXAorCSQoQU1fTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAorU09VUkNFUyA9ICQobGliY3VybF9sYV9TT1VSQ0VTKQorRElTVF9TT1VSQ0VTID0gJChsaWJjdXJsX2xhX1NPVVJDRVMpCitFVEFHUyA9IGV0YWdzCitDVEFHUyA9IGN0YWdzCitESVNURklMRVMgPSAkKERJU1RfQ09NTU9OKSAkKERJU1RfU09VUkNFUykgJChURVhJTkZPUykgJChFWFRSQV9ESVNUKQorQUNMT0NBTCA9IEBBQ0xPQ0FMQAorQU1ERVBfRkFMU0UgPSBAQU1ERVBfRkFMU0VACitBTURFUF9UUlVFID0gQEFNREVQX1RSVUVACitBTVRBUiA9IEBBTVRBUkAKK0FSID0gQEFSQAorQVMgPSBAQVNACitBVVRPQ09ORiA9IEBBVVRPQ09ORkAKK0FVVE9IRUFERVIgPSBAQVVUT0hFQURFUkAKK0FVVE9NQUtFID0gQEFVVE9NQUtFQAorQVdLID0gQEFXS0AKK0JVSUxEX0xJQkhPU1ROQU1FX0ZBTFNFID0gQEJVSUxEX0xJQkhPU1ROQU1FX0ZBTFNFQAorQlVJTERfTElCSE9TVE5BTUVfVFJVRSA9IEBCVUlMRF9MSUJIT1NUTkFNRV9UUlVFQAorQ0MgPSBAQ0NACitDQ0RFUE1PREUgPSBAQ0NERVBNT0RFQAorCisjIFRoaXMgbWlnaHQgaG9sZCAtV2Vycm9yCitDRkxBR1MgPSBAQ0ZMQUdTQCBAQ1VSTF9DRkxBR19FWFRSQVNACitDT05GSUdVUkVfT1BUSU9OUyA9IEBDT05GSUdVUkVfT1BUSU9OU0AKK0NQUCA9IEBDUFBACitDUFBGTEFHUyA9IEBDUFBGTEFHU0AKK0NST1NTQ09NUElMSU5HX0ZBTFNFID0gQENST1NTQ09NUElMSU5HX0ZBTFNFQAorQ1JPU1NDT01QSUxJTkdfVFJVRSA9IEBDUk9TU0NPTVBJTElOR19UUlVFQAorQ1VSTERFQlVHX0ZBTFNFID0gQENVUkxERUJVR19GQUxTRUAKK0NVUkxERUJVR19UUlVFID0gQENVUkxERUJVR19UUlVFQAorQ1VSTF9DQV9CVU5ETEUgPSBAQ1VSTF9DQV9CVU5ETEVACitDVVJMX0NGTEFHX0VYVFJBUyA9IEBDVVJMX0NGTEFHX0VYVFJBU0AKK0NVUkxfRElTQUJMRV9ESUNUID0gQENVUkxfRElTQUJMRV9ESUNUQAorQ1VSTF9ESVNBQkxFX0ZJTEUgPSBAQ1VSTF9ESVNBQkxFX0ZJTEVACitDVVJMX0RJU0FCTEVfRlRQID0gQENVUkxfRElTQUJMRV9GVFBACitDVVJMX0RJU0FCTEVfR09QSEVSID0gQENVUkxfRElTQUJMRV9HT1BIRVJACitDVVJMX0RJU0FCTEVfSFRUUCA9IEBDVVJMX0RJU0FCTEVfSFRUUEAKK0NVUkxfRElTQUJMRV9JTUFQID0gQENVUkxfRElTQUJMRV9JTUFQQAorQ1VSTF9ESVNBQkxFX0xEQVAgPSBAQ1VSTF9ESVNBQkxFX0xEQVBACitDVVJMX0RJU0FCTEVfTERBUFMgPSBAQ1VSTF9ESVNBQkxFX0xEQVBTQAorQ1VSTF9ESVNBQkxFX1BPUDMgPSBAQ1VSTF9ESVNBQkxFX1BPUDNACitDVVJMX0RJU0FCTEVfUFJPWFkgPSBAQ1VSTF9ESVNBQkxFX1BST1hZQAorQ1VSTF9ESVNBQkxFX1JUU1AgPSBAQ1VSTF9ESVNBQkxFX1JUU1BACitDVVJMX0RJU0FCTEVfU01UUCA9IEBDVVJMX0RJU0FCTEVfU01UUEAKK0NVUkxfRElTQUJMRV9URUxORVQgPSBAQ1VSTF9ESVNBQkxFX1RFTE5FVEAKK0NVUkxfRElTQUJMRV9URlRQID0gQENVUkxfRElTQUJMRV9URlRQQAorQ1VSTF9MSUJTID0gQENVUkxfTElCU0AKK0NVUkxfTkVUV09SS19MSUJTID0gQENVUkxfTkVUV09SS19MSUJTQAorQ1lHUEFUSF9XID0gQENZR1BBVEhfV0AKK0RFRlMgPSBAREVGU0AKK0RFUERJUiA9IEBERVBESVJACitETExUT09MID0gQERMTFRPT0xACitEU1lNVVRJTCA9IEBEU1lNVVRJTEAKK0RVTVBCSU4gPSBARFVNUEJJTkAKK0VDSE9fQyA9IEBFQ0hPX0NACitFQ0hPX04gPSBARUNIT19OQAorRUNIT19UID0gQEVDSE9fVEAKK0VHUkVQID0gQEVHUkVQQAorRU5BQkxFX1NIQVJFRCA9IEBFTkFCTEVfU0hBUkVEQAorRVhFRVhUID0gQEVYRUVYVEAKK0ZHUkVQID0gQEZHUkVQQAorR1JFUCA9IEBHUkVQQAorSEFWRV9MREFQX1NTTCA9IEBIQVZFX0xEQVBfU1NMQAorSEFWRV9MSUJaID0gQEhBVkVfTElCWkAKK0hBVkVfTElCWl9GQUxTRSA9IEBIQVZFX0xJQlpfRkFMU0VACitIQVZFX0xJQlpfVFJVRSA9IEBIQVZFX0xJQlpfVFJVRUAKK0hBVkVfUEsxMV9DUkVBVEVHRU5FUklDT0JKRUNUID0gQEhBVkVfUEsxMV9DUkVBVEVHRU5FUklDT0JKRUNUQAorSUROX0VOQUJMRUQgPSBASUROX0VOQUJMRURACitJTlNUQUxMX0RBVEEgPSBASU5TVEFMTF9EQVRBQAorSU5TVEFMTF9QUk9HUkFNID0gQElOU1RBTExfUFJPR1JBTUAKK0lOU1RBTExfU0NSSVBUID0gQElOU1RBTExfU0NSSVBUQAorSU5TVEFMTF9TVFJJUF9QUk9HUkFNID0gQElOU1RBTExfU1RSSVBfUFJPR1JBTUAKK0lQVjZfRU5BQkxFRCA9IEBJUFY2X0VOQUJMRURACitLUkI0X0VOQUJMRUQgPSBAS1JCNF9FTkFCTEVEQAorTEQgPSBATERACitMREZMQUdTID0gQExERkxBR1NACitMSUJDVVJMX0xJQlMgPSBATElCQ1VSTF9MSUJTQAorTElCT0JKUyA9IEBMSUJPQkpTQAorTElCUyA9IEBMSUJTQAorTElCVE9PTCA9IEBMSUJUT09MQAorTElQTyA9IEBMSVBPQAorTE5fUyA9IEBMTl9TQAorTFRMSUJPQkpTID0gQExUTElCT0JKU0AKK01BSU5UID0gQE1BSU5UQAorTUFJTlRBSU5FUl9NT0RFX0ZBTFNFID0gQE1BSU5UQUlORVJfTU9ERV9GQUxTRUAKK01BSU5UQUlORVJfTU9ERV9UUlVFID0gQE1BSU5UQUlORVJfTU9ERV9UUlVFQAorTUFLRUlORk8gPSBATUFLRUlORk9ACitNQU5PUFQgPSBATUFOT1BUQAorTUlNUFVSRV9GQUxTRSA9IEBNSU1QVVJFX0ZBTFNFQAorTUlNUFVSRV9UUlVFID0gQE1JTVBVUkVfVFJVRUAKK05NID0gQE5NQAorTk1FRElUID0gQE5NRURJVEAKK05PX1VOREVGSU5FRF9GQUxTRSA9IEBOT19VTkRFRklORURfRkFMU0VACitOT19VTkRFRklORURfVFJVRSA9IEBOT19VTkRFRklORURfVFJVRUAKK05ST0ZGID0gQE5ST0ZGQAorT0JKRFVNUCA9IEBPQkpEVU1QQAorT0JKRVhUID0gQE9CSkVYVEAKK09UT09MID0gQE9UT09MQAorT1RPT0w2NCA9IEBPVE9PTDY0QAorUEFDS0FHRSA9IEBQQUNLQUdFQAorUEFDS0FHRV9CVUdSRVBPUlQgPSBAUEFDS0FHRV9CVUdSRVBPUlRACitQQUNLQUdFX05BTUUgPSBAUEFDS0FHRV9OQU1FQAorUEFDS0FHRV9TVFJJTkcgPSBAUEFDS0FHRV9TVFJJTkdACitQQUNLQUdFX1RBUk5BTUUgPSBAUEFDS0FHRV9UQVJOQU1FQAorUEFDS0FHRV9VUkwgPSBAUEFDS0FHRV9VUkxACitQQUNLQUdFX1ZFUlNJT04gPSBAUEFDS0FHRV9WRVJTSU9OQAorUEFUSCA9IEBQQVRIQAorUEFUSF9TRVBBUkFUT1IgPSBAUEFUSF9TRVBBUkFUT1JACitQRVJMID0gQFBFUkxACitQS0dBRERfTkFNRSA9IEBQS0dBRERfTkFNRUAKK1BLR0FERF9QS0cgPSBAUEtHQUREX1BLR0AKK1BLR0FERF9WRU5ET1IgPSBAUEtHQUREX1ZFTkRPUkAKK1BLR0NPTkZJRyA9IEBQS0dDT05GSUdACitSQU5ET01fRklMRSA9IEBSQU5ET01fRklMRUAKK1JBTkxJQiA9IEBSQU5MSUJACitSRVFVSVJFX0xJQl9ERVBTID0gQFJFUVVJUkVfTElCX0RFUFNACitTRUQgPSBAU0VEQAorU0VUX01BS0UgPSBAU0VUX01BS0VACitTSEVMTCA9IEBTSEVMTEAKK1NPTkFNRV9CVU1QX0ZBTFNFID0gQFNPTkFNRV9CVU1QX0ZBTFNFQAorU09OQU1FX0JVTVBfVFJVRSA9IEBTT05BTUVfQlVNUF9UUlVFQAorU1NMX0VOQUJMRUQgPSBAU1NMX0VOQUJMRURACitTVEFUSUNMSUJfRkFMU0UgPSBAU1RBVElDTElCX0ZBTFNFQAorU1RBVElDTElCX1RSVUUgPSBAU1RBVElDTElCX1RSVUVACitTVFJJUCA9IEBTVFJJUEAKK1NVUFBPUlRfRkVBVFVSRVMgPSBAU1VQUE9SVF9GRUFUVVJFU0AKK1NVUFBPUlRfUFJPVE9DT0xTID0gQFNVUFBPUlRfUFJPVE9DT0xTQAorVEVTVF9TRVJWRVJfTElCUyA9IEBURVNUX1NFUlZFUl9MSUJTQAorVVNFX0FSRVMgPSBAVVNFX0FSRVNACitVU0VfRU1CRURERURfQVJFU19GQUxTRSA9IEBVU0VfRU1CRURERURfQVJFU19GQUxTRUAKK1VTRV9FTUJFRERFRF9BUkVTX1RSVUUgPSBAVVNFX0VNQkVEREVEX0FSRVNfVFJVRUAKK1VTRV9HTlVUTFMgPSBAVVNFX0dOVVRMU0AKK1VTRV9MSUJSVE1QID0gQFVTRV9MSUJSVE1QQAorVVNFX0xJQlNTSDIgPSBAVVNFX0xJQlNTSDJACitVU0VfTUFOVUFMX0ZBTFNFID0gQFVTRV9NQU5VQUxfRkFMU0VACitVU0VfTUFOVUFMX1RSVUUgPSBAVVNFX01BTlVBTF9UUlVFQAorVVNFX05TUyA9IEBVU0VfTlNTQAorVVNFX09QRU5MREFQID0gQFVTRV9PUEVOTERBUEAKK1VTRV9QT0xBUlNTTCA9IEBVU0VfUE9MQVJTU0xACitVU0VfU1NMRUFZID0gQFVTRV9TU0xFQVlACitVU0VfV0lORE9XU19TU1BJID0gQFVTRV9XSU5ET1dTX1NTUElACitWRVJTSU9OID0gQFZFUlNJT05ACitWRVJTSU9OTlVNID0gQFZFUlNJT05OVU1ACithY19jdF9DQyA9IEBhY19jdF9DQ0AKK2FjX2N0X0RVTVBCSU4gPSBAYWNfY3RfRFVNUEJJTkAKK2FtX19mYXN0ZGVwQ0NfRkFMU0UgPSBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAKK2FtX19mYXN0ZGVwQ0NfVFJVRSA9IEBhbV9fZmFzdGRlcENDX1RSVUVACithbV9faW5jbHVkZSA9IEBhbV9faW5jbHVkZUAKK2FtX19sZWFkaW5nX2RvdCA9IEBhbV9fbGVhZGluZ19kb3RACithbV9fcXVvdGUgPSBAYW1fX3F1b3RlQAorYW1fX3RhciA9IEBhbV9fdGFyQAorYW1fX3VudGFyID0gQGFtX191bnRhckAKK2JpbmRpciA9IEBiaW5kaXJACitidWlsZCA9IEBidWlsZEAKK2J1aWxkX2FsaWFzID0gQGJ1aWxkX2FsaWFzQAorYnVpbGRfY3B1ID0gQGJ1aWxkX2NwdUAKK2J1aWxkX29zID0gQGJ1aWxkX29zQAorYnVpbGRfdmVuZG9yID0gQGJ1aWxkX3ZlbmRvckAKK2RhdGFkaXIgPSBAZGF0YWRpckAKK2RhdGFyb290ZGlyID0gQGRhdGFyb290ZGlyQAorZG9jZGlyID0gQGRvY2RpckAKK2R2aWRpciA9IEBkdmlkaXJACitleGVjX3ByZWZpeCA9IEBleGVjX3ByZWZpeEAKK2hvc3QgPSBAaG9zdEAKK2hvc3RfYWxpYXMgPSBAaG9zdF9hbGlhc0AKK2hvc3RfY3B1ID0gQGhvc3RfY3B1QAoraG9zdF9vcyA9IEBob3N0X29zQAoraG9zdF92ZW5kb3IgPSBAaG9zdF92ZW5kb3JACitodG1sZGlyID0gQGh0bWxkaXJACitpbmNsdWRlZGlyID0gQGluY2x1ZGVkaXJACitpbmZvZGlyID0gQGluZm9kaXJACitpbnN0YWxsX3NoID0gQGluc3RhbGxfc2hACitsaWJkaXIgPSBAbGliZGlyQAorbGliZXhlY2RpciA9IEBsaWJleGVjZGlyQAorbGliZXh0ID0gQGxpYmV4dEAKK2xvY2FsZWRpciA9IEBsb2NhbGVkaXJACitsb2NhbHN0YXRlZGlyID0gQGxvY2Fsc3RhdGVkaXJACitsdF9FQ0hPID0gQGx0X0VDSE9ACittYW5kaXIgPSBAbWFuZGlyQAorbWtkaXJfcCA9IEBta2Rpcl9wQAorb2xkaW5jbHVkZWRpciA9IEBvbGRpbmNsdWRlZGlyQAorcGRmZGlyID0gQHBkZmRpckAKK3ByZWZpeCA9IEBwcmVmaXhACitwcm9ncmFtX3RyYW5zZm9ybV9uYW1lID0gQHByb2dyYW1fdHJhbnNmb3JtX25hbWVACitwc2RpciA9IEBwc2RpckAKK3NiaW5kaXIgPSBAc2JpbmRpckAKK3NoYXJlZHN0YXRlZGlyID0gQHNoYXJlZHN0YXRlZGlyQAorc3ViZGlycyA9IEBzdWJkaXJzQAorc3lzY29uZmRpciA9IEBzeXNjb25mZGlyQAordGFyZ2V0X2FsaWFzID0gQHRhcmdldF9hbGlhc0AKKworIyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisjICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisjICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorIworIyBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDEwLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorIworIyBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorIyB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisjIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisjCisjIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorIyBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyMgZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorIyBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitBVVRPTUFLRV9PUFRJT05TID0gZm9yZWlnbiBub3N0ZGluYworRFNQID0gdmM2bGliY3VybC5kc3AKK1ZDUFJPSiA9IGxpYmN1cmwudmNwcm9qCitET0NTID0gUkVBRE1FLmVuY29kaW5nIFJFQURNRS5tZW1vcnlsZWFrIFJFQURNRS5hcmVzIFJFQURNRS5jdXJseAlcCisgUkVBRE1FLmhvc3RpcCBSRUFETUUubXVsdGlfc29ja2V0IFJFQURNRS5odHRwYXV0aCBSRUFETUUucGlwZWxpbmluZyAgICBcCisgUkVBRE1FLmN1cmxfb2ZmX3QgUkVBRE1FLnBpbmdwb25nCisKK0NNQUtFX0RJU1QgPSBDTWFrZUxpc3RzLnR4dCBjdXJsX2NvbmZpZy5oLmNtYWtlCitFWFRSQV9ESVNUID0gTWFrZWZpbGUuYjMyIE1ha2VmaWxlLm0zMiBNYWtlZmlsZS52YzYgTWFrZWZpbGUucmlzY29zICQoRFNQKSBcCisgdmM2bGliY3VybC5kc3cgY29uZmlnLXdpbjMyLmggY29uZmlnLXdpbjMyY2UuaCBjb25maWctcmlzY29zLmggICAgICAgICAgICBcCisgY29uZmlnLW1hYy5oIGN1cmxfY29uZmlnLmguaW4gbWFrZWZpbGUuZGogY29uZmlnLmRvcyBsaWJjdXJsLnBsaXN0ICAgICAgICBcCisgbGliY3VybC5yYyBjb25maWctYW1pZ2Fvcy5oIGFtaWdhb3MuYyBhbWlnYW9zLmggbWFrZWZpbGUuYW1pZ2EJCSAgIFwKKyBNYWtlZmlsZS5uZXR3YXJlIG53bGliLmMgbndvcy5jIGxpYmN1cmwuaW1wIG1zdmNwcm9qLmhlYWQgbXN2Y3Byb2ouZm9vdCAgIFwKKyBjb25maWctd2luMzJjZS5oIGNvbmZpZy1vczQwMC5oIHNldHVwLW9zNDAwLmggY29uZmlnLXN5bWJpYW4uaAkJICAgXAorIE1ha2VmaWxlLldhdGNvbSBjb25maWctdHBmLmggJChET0NTKSAkKFZDUFJPSikgbWstY2EtYnVuZGxlLnBsCQkgICBcCisgbWstY2EtYnVuZGxlLnZicyBmaXJlZm94LWRiMnBlbS5zaCAkKENNQUtFX0RJU1QpIGNvbmZpZy12eHdvcmtzLmgJICAgXAorIE1ha2VmaWxlLnZ4d29ya3MKKworQ0xFQU5GSUxFUyA9ICQoRFNQKSAkKFZDUFJPSikKK2xpYl9MVExJQlJBUklFUyA9IGxpYmN1cmwubGEKK0BVU0VfRU1CRURERURfQVJFU19GQUxTRUBJTkNMVURFUyA9IC1JJCh0b3BfYnVpbGRkaXIpL2luY2x1ZGUvY3VybCBcCitAVVNFX0VNQkVEREVEX0FSRVNfRkFMU0VAICAgICAgICAgICAtSSQodG9wX2J1aWxkZGlyKS9pbmNsdWRlICAgICAgXAorQFVTRV9FTUJFRERFRF9BUkVTX0ZBTFNFQCAgICAgICAgICAgLUkkKHRvcF9zcmNkaXIpL2luY2x1ZGUgICAgICAgIFwKK0BVU0VfRU1CRURERURfQVJFU19GQUxTRUAgICAgICAgICAgIC1JJCh0b3BfYnVpbGRkaXIpL2xpYiAgICAgICAgICBcCitAVVNFX0VNQkVEREVEX0FSRVNfRkFMU0VAICAgICAgICAgICAtSSQodG9wX3NyY2RpcikvbGliCisKKworIyBTcGVjaWZ5IG91ciBpbmNsdWRlIHBhdGhzIGhlcmUsIGFuZCBkbyBpdCByZWxhdGl2ZSB0byAkKHRvcF9zcmNkaXIpIGFuZAorIyAkKHRvcF9idWlsZGRpciksIHRvIGVuc3VyZSB0aGF0IHRoZXNlIHBhdGhzIHdoaWNoIGJlbG9uZyB0byB0aGUgbGlicmFyeQorIyBiZWluZyBjdXJyZW50bHkgYnVpbHQgYW5kIHRlc3RlZCBhcmUgc2VhcmNoZWQgYmVmb3JlIHRoZSBsaWJyYXJ5IHdoaWNoCisjIG1pZ2h0IHBvc3NpYmx5IGFscmVhZHkgYmUgaW5zdGFsbGVkIGluIHRoZSBzeXN0ZW0uCisjCisjICQodG9wX2J1aWxkZGlyKS9pbmNsdWRlL2N1cmwgZm9yIGdlbmVyYXRlZCBjdXJsYnVpbGQuaCBpbmNsdWRlZCBmcm9tIGN1cmwuaAorIyAkKHRvcF9idWlsZGRpcikvaW5jbHVkZSBmb3IgZ2VuZXJhdGVkIGN1cmxidWlsZC5oIGluY2x1ZGVkIGZyb20gbGliL3NldHVwLmgKKyMgJCh0b3Bfc3JjZGlyKS9pbmNsdWRlIGlzIGZvciBsaWJjdXJsJ3MgZXh0ZXJuYWwgaW5jbHVkZSBmaWxlcworIyAkKHRvcF9idWlsZGRpcikvbGliIGlzIGZvciBsaWJjdXJsJ3MgZ2VuZXJhdGVkIGxpYi9jdXJsX2NvbmZpZy5oIGZpbGUKKyMgJCh0b3Bfc3JjZGlyKS9saWIgaXMgZm9yIGxpYmN1cmwncyBsaWIvc2V0dXAuaCBhbmQgb3RoZXIgInByaXZhdGUiIGZpbGVzCisjICQodG9wX2J1aWxkZGlyKS9hcmVzIGlzIGZvciBpbi10cmVlIGMtYXJlcydzIGdlbmVyYXRlZCBhcmVzX2J1aWxkLmggZmlsZQorIyAkKHRvcF9zcmNkaXIpL2FyZXMgaXMgZm9yIGluLXRyZWUgYy1hcmVzJ3MgZXh0ZXJuYWwgaW5jbHVkZSBmaWxlcworQFVTRV9FTUJFRERFRF9BUkVTX1RSVUVASU5DTFVERVMgPSAtSSQodG9wX2J1aWxkZGlyKS9pbmNsdWRlL2N1cmwgXAorQFVTRV9FTUJFRERFRF9BUkVTX1RSVUVAICAgICAgICAgICAtSSQodG9wX2J1aWxkZGlyKS9pbmNsdWRlICAgICAgXAorQFVTRV9FTUJFRERFRF9BUkVTX1RSVUVAICAgICAgICAgICAtSSQodG9wX3NyY2RpcikvaW5jbHVkZSAgICAgICAgXAorQFVTRV9FTUJFRERFRF9BUkVTX1RSVUVAICAgICAgICAgICAtSSQodG9wX2J1aWxkZGlyKS9saWIgICAgICAgICAgXAorQFVTRV9FTUJFRERFRF9BUkVTX1RSVUVAICAgICAgICAgICAtSSQodG9wX3NyY2RpcikvbGliICAgICAgICAgICAgXAorQFVTRV9FTUJFRERFRF9BUkVTX1RSVUVAICAgICAgICAgICAtSSQodG9wX2J1aWxkZGlyKS9hcmVzICAgICAgICAgXAorQFVTRV9FTUJFRERFRF9BUkVTX1RSVUVAICAgICAgICAgICAtSSQodG9wX3NyY2RpcikvYXJlcworCitAU09OQU1FX0JVTVBfRkFMU0VAVkVSU0lPTklORk8gPSAtdmVyc2lvbi1pbmZvIDY6MDoyCisKKyMKKyMgQnVtcGluZyBvZiBTT05BTUUgY29uZGl0aW9uYWxseSBtYXkgc2VlbSBsaWtlIGEgd2VpcmQgdGhpbmcgdG8gZG8sIGFuZCB5ZWFoCisjIGl0IGlzLiBUaGUgcHJvYmxlbSBpcyB0aGF0IHdlIHRyeSB0byBhdm9pZCB0aGUgYnVtcCBhcyBoYXJkIGFzIHBvc3NpYmxlLCBidXQKKyMgeWV0IGl0IGlzIHN0aWxsIG5lY2Vzc2FyeSBmb3IgYSBmZXcgcmFyZSBzaXR1YXRpb25zLiBUaGUgY29uZmlndXJlIHNjcmlwdCB3aWxsCisjIGF0dGVtcHQgdG8gZmlndXJlIG91dCB0aGVzZSBzaXR1YXRpb25zLCBhbmQgaXQgY2FuIGJlIGZvcmNlZCB0byBjb25zaWRlciB0aGlzCisjIHRvIGJlIHN1Y2ggYSBjYXNlISBTZWUgUkVBRE1FLmN1cmxfb2ZmX3QgZm9yIGZ1cnRoZXIgZGV0YWlscy4KKyMKKyMgVGhpcyBjb25kaXRpb25hbCBzb25hbWUgYnVtcCBTSE9VTEQgYmUgcmVtb3ZlZCBhdCBuZXh0ICJwcm9wZXIiIGJ1bXAuCisjCitAU09OQU1FX0JVTVBfVFJVRUBWRVJTSU9OSU5GTyA9IC12ZXJzaW9uLWluZm8gNzowOjIKKworIyBUaGlzIGZsYWcgYWNjZXB0cyBhbiBhcmd1bWVudCBvZiB0aGUgZm9ybSBjdXJyZW50WzpyZXZpc2lvbls6YWdlXV0uIFNvLAorIyBwYXNzaW5nIC12ZXJzaW9uLWluZm8gMzoxMjoxIHNldHMgY3VycmVudCB0byAzLCByZXZpc2lvbiB0byAxMiwgYW5kIGFnZSB0bworIyAxLgorIworIyBIZXJlJ3MgdGhlIHNpbXBsaWZpZWQgcnVsZSBndWlkZSBvbiBob3cgdG8gY2hhbmdlIC12ZXJzaW9uLWluZm86CisjIChjdXJyZW50IHZlcnNpb24gaXMgQzpSOkEpCisjCisjIDEuIGlmIHRoZXJlIGFyZSBvbmx5IHNvdXJjZSBjaGFuZ2VzLCB1c2UgQzpSKzE6QQorIyAyLiBpZiBpbnRlcmZhY2VzIHdlcmUgYWRkZWQgdXNlIEMrMTowOkErMQorIyAzLiBpZiBpbnRlcmZhY2VzIHdlcmUgcmVtb3ZlZCwgdGhlbiB1c2UgQysxOjA6MAorIworIyBGb3IgdGhlIGZ1bGwgZ3VpZGUgb24gbGliY3VybCBBQkkgcnVsZXMsIHNlZSBkb2NzL2xpYmN1cmwvQUJJCisKKyMgVGhlIC1uby11bmRlZmluZWQgZmxhZyBpcyBDUlVDSUFMIGZvciB0aGlzIHRvIGJ1aWxkIGZpbmUgb24gQ3lnd2luLgorQE5PX1VOREVGSU5FRF9UUlVFQFVOREVGID0gLW5vLXVuZGVmaW5lZAorCisjIFRoaXMgaXMgZm9yIGdjYyBvbiBTb2xhcmlzICg4KyA/KSB0byBhdm9pZCAicmVsb2NhdGlvbnMgcmVtYWluIGFnYWluc3QKKyMgYWxsb2NhdGFibGUgYnV0IG5vbi13cml0YWJsZSBzZWN0aW9ucyIgcHJvYmxlbXMuCitATUlNUFVSRV9UUlVFQE1JTVBVUkUgPSAtbWltcHVyZS10ZXh0CitsaWJjdXJsX2xhX0xERkxBR1MgPSAkKFVOREVGKSAkKFZFUlNJT05JTkZPKSAkKE1JTVBVUkUpICQoTElCQ1VSTF9MSUJTKQorQ1NPVVJDRVMgPSBmaWxlLmMgdGltZXZhbC5jIGJhc2U2NC5jIGhvc3RpcC5jIHByb2dyZXNzLmMgZm9ybWRhdGEuYwlcCisgIGNvb2tpZS5jIGh0dHAuYyBzZW5kZi5jIGZ0cC5jIHVybC5jIGRpY3QuYyBpZjJpcC5jIHNwZWVkY2hlY2suYwlcCisgIGxkYXAuYyBzc2x1c2UuYyB2ZXJzaW9uLmMgZ2V0ZW52LmMgZXNjYXBlLmMgbXByaW50Zi5jIHRlbG5ldC5jCVwKKyAgbmV0cmMuYyBnZXRpbmZvLmMgdHJhbnNmZXIuYyBzdHJlcXVhbC5jIGVhc3kuYyBzZWN1cml0eS5jIGtyYjQuYwlcCisgIGN1cmxfZm5tYXRjaC5jIGZpbGVpbmZvLmMgZnRwbGlzdHBhcnNlci5jIHdpbGRjYXJkLmMga3JiNS5jCQlcCisgIG1lbWRlYnVnLmMgaHR0cF9jaHVua3MuYyBzdHJ0b2suYyBjb25uZWN0LmMgbGxpc3QuYyBoYXNoLmMgbXVsdGkuYwlcCisgIGNvbnRlbnRfZW5jb2RpbmcuYyBzaGFyZS5jIGh0dHBfZGlnZXN0LmMgbWQ0LmMgbWQ1LmMgY3VybF9yYW5kLmMJXAorICBodHRwX25lZ290aWF0ZS5jIGh0dHBfbnRsbS5jIGluZXRfcHRvbi5jIHN0cnRvb2ZmdC5jIHN0cmVycm9yLmMJXAorICBob3N0YXJlcy5jIGhvc3Rhc3luLmMgaG9zdGlwNC5jIGhvc3RpcDYuYyBob3N0c3luLmMgaG9zdHRocmUuYwlcCisgIGluZXRfbnRvcC5jIHBhcnNlZGF0ZS5jIHNlbGVjdC5jIGd0bHMuYyBzc2xnZW4uYyB0ZnRwLmMgc3BsYXkuYwlcCisgIHN0cmR1cC5jIHNvY2tzLmMgc3NoLmMgbnNzLmMgcXNzbC5jIHJhd3N0ci5jIGN1cmxfYWRkcmluZm8uYwkJXAorICBzb2Nrc19nc3NhcGkuYyBzb2Nrc19zc3BpLmMgY3VybF9zc3BpLmMgc2xpc3QuYyBub25ibG9jay5jCQlcCisgIGN1cmxfbWVtcmNoci5jIGltYXAuYyBwb3AzLmMgc210cC5jIHBpbmdwb25nLmMgcnRzcC5jIGN1cmxfdGhyZWFkcy5jCVwKKyAgd2Fybmxlc3MuYyBobWFjLmMgcG9sYXJzc2wuYyBjdXJsX3J0bXAuYyBvcGVubGRhcC5jIGN1cmxfZ2V0aG9zdG5hbWUuY1wKKyAgZ29waGVyLmMKKworSEhFQURFUlMgPSBhcnBhX3RlbG5ldC5oIG5ldHJjLmggZmlsZS5oIHRpbWV2YWwuaCBxc3NsLmggaG9zdGlwLmgJXAorICBwcm9ncmVzcy5oIGZvcm1kYXRhLmggY29va2llLmggaHR0cC5oIHNlbmRmLmggZnRwLmggdXJsLmggZGljdC5oCVwKKyAgaWYyaXAuaCBzcGVlZGNoZWNrLmggdXJsZGF0YS5oIGN1cmxfbGRhcC5oIHNzbHVzZS5oIGVzY2FwZS5oIHRlbG5ldC5oCVwKKyAgZ2V0aW5mby5oIHN0cmVxdWFsLmgga3JiNC5oIG1lbWRlYnVnLmggaHR0cF9jaHVua3MuaCBjdXJsX3JhbmQuaAlcCisgIGN1cmxfZm5tYXRjaC5oIHdpbGRjYXJkLmggZmlsZWluZm8uaCBmdHBsaXN0cGFyc2VyLmggc3RydG9rLmgJCVwKKyAgY29ubmVjdC5oIGxsaXN0LmggaGFzaC5oIGNvbnRlbnRfZW5jb2RpbmcuaCBzaGFyZS5oIGN1cmxfbWQ0LmgJXAorICBjdXJsX21kNS5oIGh0dHBfZGlnZXN0LmggaHR0cF9uZWdvdGlhdGUuaCBodHRwX250bG0uaCBpbmV0X3B0b24uaAlcCisgIHN0cnRvb2ZmdC5oIHN0cmVycm9yLmggaW5ldF9udG9wLmggY3VybHguaCBjdXJsX21lbW9yeS5oIHNldHVwLmgJXAorICB0cmFuc2Zlci5oIHNlbGVjdC5oIGVhc3lpZi5oIG11bHRpaWYuaCBwYXJzZWRhdGUuaCBzc2xnZW4uaCBndGxzLmgJXAorICB0ZnRwLmggc29ja2FkZHIuaCBzcGxheS5oIHN0cmR1cC5oIHNldHVwX29uY2UuaCBzb2Nrcy5oIHNzaC5oIG5zc2cuaAlcCisgIGN1cmxfYmFzZTY0LmggcmF3c3RyLmggY3VybF9hZGRyaW5mby5oIGN1cmxfc3NwaS5oIHNsaXN0Lmggbm9uYmxvY2suaAlcCisgIGN1cmxfbWVtcmNoci5oIGltYXAuaCBwb3AzLmggc210cC5oIHBpbmdwb25nLmggcnRzcC5oIGN1cmxfdGhyZWFkcy5oCVwKKyAgd2Fybmxlc3MuaCBjdXJsX2htYWMuaCBwb2xhcnNzbC5oIGN1cmxfcnRtcC5oIGN1cmxfZ2V0aG9zdG5hbWUuaCAgICAgIFwKKyAgZ29waGVyLmgKKworCisjIE1ha2VmaWxlLmluYyBwcm92aWRlcyB0aGUgQ1NPVVJDRVMgYW5kIEhIRUFERVJTIGRlZmluZXMKK2xpYmN1cmxfbGFfU09VUkNFUyA9ICQoQ1NPVVJDRVMpICQoSEhFQURFUlMpCitXSU4zMlNPVVJDRVMgPSAkKENTT1VSQ0VTKQorV0lOMzJIRUFERVJTID0gJChISEVBREVSUykgY29uZmlnLXdpbjMyLmgKK0RTUE9VVCA9IHwgYXdrICd7cHJpbnRmKCIlc1xyXG4iLCAkJDApfScgPj4gJChEU1ApCitWQ1BST0pPVVQgPSB8IGF3ayAne3ByaW50ZigiJXNcclxuIiwgJCQwKX0nID4+ICQoVkNQUk9KKQorYWxsOiBjdXJsX2NvbmZpZy5oCisJJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYWxsLWFtCisKKy5TVUZGSVhFUzoKKy5TVUZGSVhFUzogLmMgLmxvIC5vIC5vYmoKKyQoc3JjZGlyKS9NYWtlZmlsZS5pbjogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKHNyY2RpcikvTWFrZWZpbGUuYW0gJChzcmNkaXIpL01ha2VmaWxlLmluYyAkKGFtX19jb25maWd1cmVfZGVwcykKKwlAZm9yIGRlcCBpbiAkPzsgZG8gXAorCSAgY2FzZSAnJChhbV9fY29uZmlndXJlX2RlcHMpJyBpbiBcCisJICAgICokJGRlcCopIFwKKwkgICAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2ggXAorCQkmJiBleGl0IDA7IFwKKwkgICAgICBleGl0IDE7OyBcCisJICBlc2FjOyBcCisJZG9uZTsgXAorCWVjaG8gJyBjZCAkKHRvcF9zcmNkaXIpICYmICQoQVVUT01BS0UpIC0tZm9yZWlnbiAgbGliL01ha2VmaWxlJzsgXAorCWNkICQodG9wX3NyY2RpcikgJiYgXAorCSAgJChBVVRPTUFLRSkgLS1mb3JlaWduICBsaWIvTWFrZWZpbGUKKy5QUkVDSU9VUzogTWFrZWZpbGUKK01ha2VmaWxlOiAkKHNyY2RpcikvTWFrZWZpbGUuaW4gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMKKwlAY2FzZSAnJD8nIGluIFwKKwkgICpjb25maWcuc3RhdHVzKikgXAorCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2g7OyBcCisJICAqKSBcCisJICAgIGVjaG8gJyBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSknOyBcCisJICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKTs7IFwKKwllc2FjOworCiskKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1czogJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUgJChDT05GSUdfU1RBVFVTX0RFUEVOREVOQ0lFUykKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKworJCh0b3Bfc3JjZGlyKS9jb25maWd1cmU6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fY29uZmlndXJlX2RlcHMpCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCiskKEFDTE9DQUxfTTQpOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoYW1fX2FjbG9jYWxfbTRfZGVwcykKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKworY3VybF9jb25maWcuaDogc3RhbXAtaDEKKwlAaWYgdGVzdCAhIC1mICRAOyB0aGVuIFwKKwkgIHJtIC1mIHN0YW1wLWgxOyBcCisJICAkKE1BS0UpIHN0YW1wLWgxOyBcCisJZWxzZSA6OyBmaQorCitzdGFtcC1oMTogJChzcmNkaXIpL2N1cmxfY29uZmlnLmguaW4gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMKKwlAcm0gLWYgc3RhbXAtaDEKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzIGxpYi9jdXJsX2NvbmZpZy5oCiskKHNyY2RpcikvY3VybF9jb25maWcuaC5pbjogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKGFtX19jb25maWd1cmVfZGVwcykgCisJY2QgJCh0b3Bfc3JjZGlyKSAmJiAkKEFVVE9IRUFERVIpCisJcm0gLWYgc3RhbXAtaDEKKwl0b3VjaCAkQAorCitkaXN0Y2xlYW4taGRyOgorCS1ybSAtZiBjdXJsX2NvbmZpZy5oIHN0YW1wLWgxCitpbnN0YWxsLWxpYkxUTElCUkFSSUVTOiAkKGxpYl9MVExJQlJBUklFUykKKwlAJChOT1JNQUxfSU5TVEFMTCkKKwl0ZXN0IC16ICIkKGxpYmRpcikiIHx8ICQobWtkaXJfcCkgIiQoREVTVERJUikkKGxpYmRpcikiCisJQGxpc3Q9JyQobGliX0xUTElCUkFSSUVTKSc7IGZvciBwIGluICQkbGlzdDsgZG8gXAorCSAgaWYgdGVzdCAtZiAkJHA7IHRoZW4gXAorCSAgICBmPSQoYW1fX3N0cmlwX2RpcikgXAorCSAgICBlY2hvICIgJChMSUJUT09MKSAtLW1vZGU9aW5zdGFsbCAkKGxpYkxUTElCUkFSSUVTX0lOU1RBTEwpICQoSU5TVEFMTF9TVFJJUF9GTEFHKSAnJCRwJyAnJChERVNURElSKSQobGliZGlyKS8kJGYnIjsgXAorCSAgICAkKExJQlRPT0wpIC0tbW9kZT1pbnN0YWxsICQobGliTFRMSUJSQVJJRVNfSU5TVEFMTCkgJChJTlNUQUxMX1NUUklQX0ZMQUcpICIkJHAiICIkKERFU1RESVIpJChsaWJkaXIpLyQkZiI7IFwKKwkgIGVsc2UgOjsgZmk7IFwKKwlkb25lCisKK3VuaW5zdGFsbC1saWJMVExJQlJBUklFUzoKKwlAJChOT1JNQUxfVU5JTlNUQUxMKQorCUBzZXQgLXg7IGxpc3Q9JyQobGliX0xUTElCUkFSSUVTKSc7IGZvciBwIGluICQkbGlzdDsgZG8gXAorCSAgcD0kKGFtX19zdHJpcF9kaXIpIFwKKwkgIGVjaG8gIiAkKExJQlRPT0wpIC0tbW9kZT11bmluc3RhbGwgcm0gLWYgJyQoREVTVERJUikkKGxpYmRpcikvJCRwJyI7IFwKKwkgICQoTElCVE9PTCkgLS1tb2RlPXVuaW5zdGFsbCBybSAtZiAiJChERVNURElSKSQobGliZGlyKS8kJHAiOyBcCisJZG9uZQorCitjbGVhbi1saWJMVExJQlJBUklFUzoKKwktdGVzdCAteiAiJChsaWJfTFRMSUJSQVJJRVMpIiB8fCBybSAtZiAkKGxpYl9MVExJQlJBUklFUykKKwlAbGlzdD0nJChsaWJfTFRMSUJSQVJJRVMpJzsgZm9yIHAgaW4gJCRsaXN0OyBkbyBcCisJICBkaXI9ImBlY2hvICQkcCB8IHNlZCAtZSAnc3wvW14vXSokJHx8J2AiOyBcCisJICB0ZXN0ICIkJGRpciIgIT0gIiQkcCIgfHwgZGlyPS47IFwKKwkgIGVjaG8gInJtIC1mIFwiJCR7ZGlyfS9zb19sb2NhdGlvbnNcIiI7IFwKKwkgIHJtIC1mICIkJHtkaXJ9L3NvX2xvY2F0aW9ucyI7IFwKKwlkb25lCitsaWJjdXJsLmxhOiAkKGxpYmN1cmxfbGFfT0JKRUNUUykgJChsaWJjdXJsX2xhX0RFUEVOREVOQ0lFUykgCisJJChMSU5LKSAtcnBhdGggJChsaWJkaXIpICQobGliY3VybF9sYV9MREZMQUdTKSAkKGxpYmN1cmxfbGFfT0JKRUNUUykgJChsaWJjdXJsX2xhX0xJQkFERCkgJChMSUJTKQorCittb3N0bHljbGVhbi1jb21waWxlOgorCS1ybSAtZiAqLiQoT0JKRVhUKQorCitkaXN0Y2xlYW4tY29tcGlsZToKKwktcm0gLWYgKi50YWIuYworCitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvYmFzZTY0LlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvY29ubmVjdC5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2NvbnRlbnRfZW5jb2RpbmcuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9jb29raWUuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9jdXJsX2FkZHJpbmZvLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvY3VybF9mbm1hdGNoLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvY3VybF9nZXRob3N0bmFtZS5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2N1cmxfbWVtcmNoci5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2N1cmxfcmFuZC5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2N1cmxfcnRtcC5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2N1cmxfc3NwaS5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2N1cmxfdGhyZWFkcy5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2RpY3QuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9lYXN5LlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvZXNjYXBlLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvZmlsZS5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2ZpbGVpbmZvLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvZm9ybWRhdGEuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9mdHAuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9mdHBsaXN0cGFyc2VyLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvZ2V0ZW52LlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvZ2V0aW5mby5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2dvcGhlci5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2d0bHMuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9oYXNoLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvaG1hYy5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2hvc3RhcmVzLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvaG9zdGFzeW4uUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9ob3N0aXAuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9ob3N0aXA0LlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvaG9zdGlwNi5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2hvc3RzeW4uUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9ob3N0dGhyZS5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2h0dHAuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9odHRwX2NodW5rcy5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2h0dHBfZGlnZXN0LlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvaHR0cF9uZWdvdGlhdGUuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9odHRwX250bG0uUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9pZjJpcC5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2ltYXAuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9pbmV0X250b3AuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9pbmV0X3B0b24uUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9rcmI0LlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikva3JiNS5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xkYXAuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9sbGlzdC5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL21kNC5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL21kNS5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL21lbWRlYnVnLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbXByaW50Zi5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL211bHRpLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbmV0cmMuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9ub25ibG9jay5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL25zcy5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL29wZW5sZGFwLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvcGFyc2VkYXRlLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvcGluZ3BvbmcuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9wb2xhcnNzbC5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL3BvcDMuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9wcm9ncmVzcy5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL3Fzc2wuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9yYXdzdHIuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9ydHNwLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvc2VjdXJpdHkuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9zZWxlY3QuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9zZW5kZi5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL3NoYXJlLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvc2xpc3QuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9zbXRwLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvc29ja3MuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9zb2Nrc19nc3NhcGkuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9zb2Nrc19zc3BpLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvc3BlZWRjaGVjay5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL3NwbGF5LlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvc3NoLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvc3NsZ2VuLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvc3NsdXNlLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvc3RyZHVwLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvc3RyZXF1YWwuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9zdHJlcnJvci5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL3N0cnRvay5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL3N0cnRvb2ZmdC5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL3RlbG5ldC5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL3RmdHAuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS90aW1ldmFsLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvdHJhbnNmZXIuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS91cmwuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS92ZXJzaW9uLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvd2Fybmxlc3MuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS93aWxkY2FyZC5QbG9AYW1fX3F1b3RlQAorCisuYy5vOgorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJaWYgJChDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgIiQoREVQRElSKS8kKi5UcG8iIC1jIC1vICRAICQ8OyBcCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAl0aGVuIG12IC1mICIkKERFUERJUikvJCouVHBvIiAiJChERVBESVIpLyQqLlBvIjsgZWxzZSBybSAtZiAiJChERVBESVIpLyQqLlRwbyI7IGV4aXQgMTsgZmkKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENPTVBJTEUpIC1jICQ8CisKKy5jLm9iajoKK0BhbV9fZmFzdGRlcENDX1RSVUVACWlmICQoQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICIkKERFUERJUikvJCouVHBvIiAtYyAtbyAkQCBgJChDWUdQQVRIX1cpICckPCdgOyBcCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAl0aGVuIG12IC1mICIkKERFUERJUikvJCouVHBvIiAiJChERVBESVIpLyQqLlBvIjsgZWxzZSBybSAtZiAiJChERVBESVIpLyQqLlRwbyI7IGV4aXQgMTsgZmkKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENPTVBJTEUpIC1jIGAkKENZR1BBVEhfVykgJyQ8J2AKKworLmMubG86CitAYW1fX2Zhc3RkZXBDQ19UUlVFQAlpZiAkKExUQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICIkKERFUERJUikvJCouVHBvIiAtYyAtbyAkQCAkPDsgXAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJdGhlbiBtdiAtZiAiJChERVBESVIpLyQqLlRwbyIgIiQoREVQRElSKS8kKi5QbG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvJCouVHBvIjsgZXhpdCAxOyBmaQorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKExUQ09NUElMRSkgLWMgLW8gJEAgJDwKKworbW9zdGx5Y2xlYW4tbGlidG9vbDoKKwktcm0gLWYgKi5sbworCitjbGVhbi1saWJ0b29sOgorCS1ybSAtcmYgLmxpYnMgX2xpYnMKKworZGlzdGNsZWFuLWxpYnRvb2w6CisJLXJtIC1mIGxpYnRvb2wKK3VuaW5zdGFsbC1pbmZvLWFtOgorCitJRDogJChIRUFERVJTKSAkKFNPVVJDRVMpICQoTElTUCkgJChUQUdTX0ZJTEVTKQorCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCisJdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKKwkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCisJICBkb25lIHwgXAorCSAgJChBV0spICcgICAgeyBmaWxlc1skJDBdID0gMTsgfSBcCisJICAgICAgIEVORCB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfSdgOyBcCisJbWtpZCAtZklEICQkdW5pcXVlCit0YWdzOiBUQUdTCisKK1RBR1M6ICAkKEhFQURFUlMpICQoU09VUkNFUykgY3VybF9jb25maWcuaC5pbiAkKFRBR1NfREVQRU5ERU5DSUVTKSBcCisJCSQoVEFHU19GSUxFUykgJChMSVNQKQorCXRhZ3M9OyBcCisJaGVyZT1gcHdkYDsgXAorCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSBjdXJsX2NvbmZpZy5oLmluICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKKwl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAorCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKKwkgIGRvbmUgfCBcCisJICAkKEFXSykgJyAgICB7IGZpbGVzWyQkMF0gPSAxOyB9IFwKKwkgICAgICAgRU5EIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9J2A7IFwKKwlpZiB0ZXN0IC16ICIkKEVUQUdTX0FSR1MpJCR0YWdzJCR1bmlxdWUiOyB0aGVuIDo7IGVsc2UgXAorCSAgdGVzdCAtbiAiJCR1bmlxdWUiIHx8IHVuaXF1ZT0kJGVtcHR5X2ZpeDsgXAorCSAgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRBR1NfQVJHUykgXAorCSAgICAkJHRhZ3MgJCR1bmlxdWU7IFwKKwlmaQorY3RhZ3M6IENUQUdTCitDVEFHUzogICQoSEVBREVSUykgJChTT1VSQ0VTKSBjdXJsX2NvbmZpZy5oLmluICQoVEFHU19ERVBFTkRFTkNJRVMpIFwKKwkJJChUQUdTX0ZJTEVTKSAkKExJU1ApCisJdGFncz07IFwKKwloZXJlPWBwd2RgOyBcCisJbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpIGN1cmxfY29uZmlnLmguaW4gJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAorCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCisJICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAorCSAgZG9uZSB8IFwKKwkgICQoQVdLKSAnICAgIHsgZmlsZXNbJCQwXSA9IDE7IH0gXAorCSAgICAgICBFTkQgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH0nYDsgXAorCXRlc3QgLXogIiQoQ1RBR1NfQVJHUykkJHRhZ3MkJHVuaXF1ZSIgXAorCSAgfHwgJChDVEFHUykgJChDVEFHU0ZMQUdTKSAkKEFNX0NUQUdTRkxBR1MpICQoQ1RBR1NfQVJHUykgXAorCSAgICAgJCR0YWdzICQkdW5pcXVlCisKK0dUQUdTOgorCWhlcmU9YCQoYW1fX2NkKSAkKHRvcF9idWlsZGRpcikgJiYgcHdkYCBcCisJICAmJiBjZCAkKHRvcF9zcmNkaXIpIFwKKwkgICYmIGd0YWdzIC1pICQoR1RBR1NfQVJHUykgJCRoZXJlCisKK2Rpc3RjbGVhbi10YWdzOgorCS1ybSAtZiBUQUdTIElEIEdUQUdTIEdSVEFHUyBHU1lNUyBHUEFUSCB0YWdzCisKK2Rpc3RkaXI6ICQoRElTVEZJTEVTKQorCUBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAnc3wufC58ZydgOyBcCisJdG9wc3JjZGlyc3RyaXA9YGVjaG8gIiQodG9wX3NyY2RpcikiIHwgc2VkICdzfC58LnxnJ2A7IFwKKwlsaXN0PSckKERJU1RGSUxFUyknOyBmb3IgZmlsZSBpbiAkJGxpc3Q7IGRvIFwKKwkgIGNhc2UgJCRmaWxlIGluIFwKKwkgICAgJChzcmNkaXIpLyopIGZpbGU9YGVjaG8gIiQkZmlsZSIgfCBzZWQgInN8XiQkc3JjZGlyc3RyaXAvfHwiYDs7IFwKKwkgICAgJCh0b3Bfc3JjZGlyKS8qKSBmaWxlPWBlY2hvICIkJGZpbGUiIHwgc2VkICJzfF4kJHRvcHNyY2RpcnN0cmlwL3wkKHRvcF9idWlsZGRpcikvfCJgOzsgXAorCSAgZXNhYzsgXAorCSAgaWYgdGVzdCAtZiAkJGZpbGUgfHwgdGVzdCAtZCAkJGZpbGU7IHRoZW4gZD0uOyBlbHNlIGQ9JChzcmNkaXIpOyBmaTsgXAorCSAgZGlyPWBlY2hvICIkJGZpbGUiIHwgc2VkIC1lICdzLC9bXi9dKiQkLCwnYDsgXAorCSAgaWYgdGVzdCAiJCRkaXIiICE9ICIkJGZpbGUiICYmIHRlc3QgIiQkZGlyIiAhPSAiLiI7IHRoZW4gXAorCSAgICBkaXI9Ii8kJGRpciI7IFwKKwkgICAgJChta2Rpcl9wKSAiJChkaXN0ZGlyKSQkZGlyIjsgXAorCSAgZWxzZSBcCisJICAgIGRpcj0nJzsgXAorCSAgZmk7IFwKKwkgIGlmIHRlc3QgLWQgJCRkLyQkZmlsZTsgdGhlbiBcCisJICAgIGlmIHRlc3QgLWQgJChzcmNkaXIpLyQkZmlsZSAmJiB0ZXN0ICQkZCAhPSAkKHNyY2Rpcik7IHRoZW4gXAorCSAgICAgIGNwIC1wUiAkKHNyY2RpcikvJCRmaWxlICQoZGlzdGRpcikkJGRpciB8fCBleGl0IDE7IFwKKwkgICAgZmk7IFwKKwkgICAgY3AgLXBSICQkZC8kJGZpbGUgJChkaXN0ZGlyKSQkZGlyIHx8IGV4aXQgMTsgXAorCSAgZWxzZSBcCisJICAgIHRlc3QgLWYgJChkaXN0ZGlyKS8kJGZpbGUgXAorCSAgICB8fCBjcCAtcCAkJGQvJCRmaWxlICQoZGlzdGRpcikvJCRmaWxlIFwKKwkgICAgfHwgZXhpdCAxOyBcCisJICBmaTsgXAorCWRvbmUKK2NoZWNrLWFtOiBhbGwtYW0KK2NoZWNrOiBjaGVjay1hbQorYWxsLWFtOiBNYWtlZmlsZSAkKExUTElCUkFSSUVTKSBjdXJsX2NvbmZpZy5oCitpbnN0YWxsZGlyczoKKwlmb3IgZGlyIGluICIkKERFU1RESVIpJChsaWJkaXIpIjsgZG8gXAorCSAgdGVzdCAteiAiJCRkaXIiIHx8ICQobWtkaXJfcCkgIiQkZGlyIjsgXAorCWRvbmUKK2luc3RhbGw6IGluc3RhbGwtYW0KK2luc3RhbGwtZXhlYzogaW5zdGFsbC1leGVjLWFtCitpbnN0YWxsLWRhdGE6IGluc3RhbGwtZGF0YS1hbQordW5pbnN0YWxsOiB1bmluc3RhbGwtYW0KKworaW5zdGFsbC1hbTogYWxsLWFtCisJQCQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWRhdGEtYW0KKworaW5zdGFsbGNoZWNrOiBpbnN0YWxsY2hlY2stYW0KK2luc3RhbGwtc3RyaXA6CisJJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKKwkgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAorCSAgYHRlc3QgLXogJyQoU1RSSVApJyB8fCBcCisJICAgIGVjaG8gIklOU1RBTExfUFJPR1JBTV9FTlY9U1RSSVBQUk9HPSckKFNUUklQKSciYCBpbnN0YWxsCittb3N0bHljbGVhbi1nZW5lcmljOgorCitjbGVhbi1nZW5lcmljOgorCS10ZXN0IC16ICIkKENMRUFORklMRVMpIiB8fCBybSAtZiAkKENMRUFORklMRVMpCisKK2Rpc3RjbGVhbi1nZW5lcmljOgorCS10ZXN0IC16ICIkKENPTkZJR19DTEVBTl9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX0ZJTEVTKQorCittYWludGFpbmVyLWNsZWFuLWdlbmVyaWM6CisJQGVjaG8gIlRoaXMgY29tbWFuZCBpcyBpbnRlbmRlZCBmb3IgbWFpbnRhaW5lcnMgdG8gdXNlIgorCUBlY2hvICJpdCBkZWxldGVzIGZpbGVzIHRoYXQgbWF5IHJlcXVpcmUgc3BlY2lhbCB0b29scyB0byByZWJ1aWxkLiIKK2NsZWFuOiBjbGVhbi1hbQorCitjbGVhbi1hbTogY2xlYW4tZ2VuZXJpYyBjbGVhbi1saWJMVExJQlJBUklFUyBjbGVhbi1saWJ0b29sIFwKKwltb3N0bHljbGVhbi1hbQorCitkaXN0Y2xlYW46IGRpc3RjbGVhbi1hbQorCS1ybSAtcmYgLi8kKERFUERJUikKKwktcm0gLWYgTWFrZWZpbGUKK2Rpc3RjbGVhbi1hbTogY2xlYW4tYW0gZGlzdGNsZWFuLWNvbXBpbGUgZGlzdGNsZWFuLWdlbmVyaWMgXAorCWRpc3RjbGVhbi1oZHIgZGlzdGNsZWFuLWxpYnRvb2wgZGlzdGNsZWFuLXRhZ3MKKworZHZpOiBkdmktYW0KKworZHZpLWFtOgorCitodG1sOiBodG1sLWFtCisKK2luZm86IGluZm8tYW0KKworaW5mby1hbToKKworaW5zdGFsbC1kYXRhLWFtOgorCitpbnN0YWxsLWV4ZWMtYW06IGluc3RhbGwtbGliTFRMSUJSQVJJRVMKKworaW5zdGFsbC1pbmZvOiBpbnN0YWxsLWluZm8tYW0KKworaW5zdGFsbC1tYW46CisKK2luc3RhbGxjaGVjay1hbToKKworbWFpbnRhaW5lci1jbGVhbjogbWFpbnRhaW5lci1jbGVhbi1hbQorCS1ybSAtcmYgLi8kKERFUERJUikKKwktcm0gLWYgTWFrZWZpbGUKK21haW50YWluZXItY2xlYW4tYW06IGRpc3RjbGVhbi1hbSBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMKKworbW9zdGx5Y2xlYW46IG1vc3RseWNsZWFuLWFtCisKK21vc3RseWNsZWFuLWFtOiBtb3N0bHljbGVhbi1jb21waWxlIG1vc3RseWNsZWFuLWdlbmVyaWMgXAorCW1vc3RseWNsZWFuLWxpYnRvb2wKKworcGRmOiBwZGYtYW0KKworcGRmLWFtOgorCitwczogcHMtYW0KKworcHMtYW06CisKK3VuaW5zdGFsbC1hbTogdW5pbnN0YWxsLWluZm8tYW0gdW5pbnN0YWxsLWxpYkxUTElCUkFSSUVTCisKKy5QSE9OWTogQ1RBR1MgR1RBR1MgYWxsIGFsbC1hbSBjaGVjayBjaGVjay1hbSBjbGVhbiBjbGVhbi1nZW5lcmljIFwKKwljbGVhbi1saWJMVExJQlJBUklFUyBjbGVhbi1saWJ0b29sIGN0YWdzIGRpc3RjbGVhbiBcCisJZGlzdGNsZWFuLWNvbXBpbGUgZGlzdGNsZWFuLWdlbmVyaWMgZGlzdGNsZWFuLWhkciBcCisJZGlzdGNsZWFuLWxpYnRvb2wgZGlzdGNsZWFuLXRhZ3MgZGlzdGRpciBkdmkgZHZpLWFtIGh0bWwgXAorCWh0bWwtYW0gaW5mbyBpbmZvLWFtIGluc3RhbGwgaW5zdGFsbC1hbSBpbnN0YWxsLWRhdGEgXAorCWluc3RhbGwtZGF0YS1hbSBpbnN0YWxsLWV4ZWMgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtaW5mbyBcCisJaW5zdGFsbC1pbmZvLWFtIGluc3RhbGwtbGliTFRMSUJSQVJJRVMgaW5zdGFsbC1tYW4gXAorCWluc3RhbGwtc3RyaXAgaW5zdGFsbGNoZWNrIGluc3RhbGxjaGVjay1hbSBpbnN0YWxsZGlycyBcCisJbWFpbnRhaW5lci1jbGVhbiBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4gXAorCW1vc3RseWNsZWFuLWNvbXBpbGUgbW9zdGx5Y2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbi1saWJ0b29sIFwKKwlwZGYgcGRmLWFtIHBzIHBzLWFtIHRhZ3MgdW5pbnN0YWxsIHVuaW5zdGFsbC1hbSBcCisJdW5pbnN0YWxsLWluZm8tYW0gdW5pbnN0YWxsLWxpYkxUTElCUkFSSUVTCisKKworJChEU1ApOiBtc3ZjcHJvai5oZWFkIG1zdmNwcm9qLmZvb3QgTWFrZWZpbGUuYW0KKwllY2hvICJjcmVhdGluZyAkKERTUCkiCisJQChjcCAkKHNyY2RpcikvbXN2Y3Byb2ouaGVhZCAkKERTUCk7IFwKKwllY2hvICIjIEJlZ2luIEdyb3VwIFwiU291cmNlIEZpbGVzXCIiICQoRFNQT1VUKTsgXAorICAgICAgICBlY2hvICIiICQoRFNQT1VUKTsgXAorICAgICAgICBlY2hvICIjIFBST1AgRGVmYXVsdF9GaWx0ZXIgXCJcIiIgJChEU1BPVVQpOyBcCisgICAgICAgIHdpbjMyX3NyY3M9JyQoV0lOMzJTT1VSQ0VTKSc7IFwKKyAgICAgICAgc29ydGVkX3NyY3M9YGZvciBmaWxlIGluICQkd2luMzJfc3JjczsgZG8gZWNobyAkJGZpbGU7IGRvbmUgfCBzb3J0YDsgXAorICAgICAgICBmb3IgZmlsZSBpbiAkJHNvcnRlZF9zcmNzOyBkbyBcCisJZWNobyAiIyBCZWdpbiBTb3VyY2UgRmlsZSIgJChEU1BPVVQpOyBcCisJZWNobyAiIiAkKERTUE9VVCk7IFwKKwllY2hvICJTT1VSQ0U9LlxcIiQkZmlsZSAkKERTUE9VVCk7IFwKKwllY2hvICIjIEVuZCBTb3VyY2UgRmlsZSIgJChEU1BPVVQpOyBcCisJZG9uZTsgXAorCWVjaG8gIiMgRW5kIEdyb3VwIiAkKERTUE9VVCk7IFwKKwllY2hvICIjIEJlZ2luIEdyb3VwIFwiSGVhZGVyIEZpbGVzXCIiICQoRFNQT1VUKTsgXAorICAgICAgICBlY2hvICIiICQoRFNQT1VUKTsgXAorICAgICAgICBlY2hvICIjIFBST1AgRGVmYXVsdF9GaWx0ZXIgXCJcIiIgJChEU1BPVVQpOyBcCisgICAgICAgIHdpbjMyX2hkcnM9JyQoV0lOMzJIRUFERVJTKSc7IFwKKyAgICAgICAgc29ydGVkX2hkcnM9YGZvciBmaWxlIGluICQkd2luMzJfaGRyczsgZG8gZWNobyAkJGZpbGU7IGRvbmUgfCBzb3J0YDsgXAorICAgICAgICBmb3IgZmlsZSBpbiAkJHNvcnRlZF9oZHJzOyBkbyBcCisJZWNobyAiIyBCZWdpbiBTb3VyY2UgRmlsZSIgJChEU1BPVVQpOyBcCisJZWNobyAiIiAkKERTUE9VVCk7IFwKKwllY2hvICJTT1VSQ0U9LlxcIiQkZmlsZSAkKERTUE9VVCk7IFwKKwllY2hvICIjIEVuZCBTb3VyY2UgRmlsZSIgJChEU1BPVVQpOyBcCisJZG9uZTsgXAorCWVjaG8gIiMgRW5kIEdyb3VwIiAkKERTUE9VVCk7IFwKKwljYXQgJChzcmNkaXIpL21zdmNwcm9qLmZvb3QgJChEU1BPVVQpICkKKworJChWQ1BST0opOiB2Yzhwcm9qLmhlYWQgdmM4cHJvai5mb290IE1ha2VmaWxlLmFtCisJZWNobyAiY3JlYXRpbmcgJChWQ1BST0opIgorCUAoY3AgJChzcmNkaXIpL3ZjOHByb2ouaGVhZCAkKFZDUFJPSik7IFwKKyAgICAgICAgd2luMzJfc3Jjcz0nJChXSU4zMlNPVVJDRVMpJzsgXAorICAgICAgICBzb3J0ZWRfc3Jjcz1gZm9yIGZpbGUgaW4gJCR3aW4zMl9zcmNzOyBkbyBlY2hvICQkZmlsZTsgZG9uZSB8IHNvcnRgOyBcCisgICAgICAgIGZvciBmaWxlIGluICQkc29ydGVkX3NyY3M7IGRvIFwKKwllY2hvICI8RmlsZSBSZWxhdGl2ZVBhdGg9XCIiJCRmaWxlIlwiPjwvRmlsZT4iICQoVkNQUk9KT1VUKTsgXAorCWRvbmU7IFwKKwllY2hvICI8L0ZpbHRlcj48RmlsdGVyCU5hbWU9XCJIZWFkZXIgRmlsZXNcIj4iICQoVkNQUk9KT1VUKTsgXAorICAgICAgICB3aW4zMl9oZHJzPSckKFdJTjMySEVBREVSUyknOyBcCisgICAgICAgIHNvcnRlZF9oZHJzPWBmb3IgZmlsZSBpbiAkJHdpbjMyX2hkcnM7IGRvIGVjaG8gJCRmaWxlOyBkb25lIHwgc29ydGA7IFwKKyAgICAgICAgZm9yIGZpbGUgaW4gJCRzb3J0ZWRfaGRyczsgZG8gXAorCWVjaG8gIjxGaWxlIFJlbGF0aXZlUGF0aD1cIiIkJGZpbGUiXCI+PC9GaWxlPiIgJChWQ1BST0pPVVQpOyBcCisJZG9uZTsgXAorCWNhdCAkKHNyY2RpcikvdmM4cHJvai5mb290ICQoVkNQUk9KT1VUKSApCisjIFRlbGwgdmVyc2lvbnMgWzMuNTksMy42Mykgb2YgR05VIG1ha2UgdG8gbm90IGV4cG9ydCBhbGwgdmFyaWFibGVzLgorIyBPdGhlcndpc2UgYSBzeXN0ZW0gbGltaXQgKGZvciBTeXNWIGF0IGxlYXN0KSBtYXkgYmUgZXhjZWVkZWQuCisuTk9FWFBPUlQ6CmRpZmYgLS1naXQgYS9saWIvTWFrZWZpbGUuaW5jIGIvbGliL01ha2VmaWxlLmluYwppbmRleCA5ODAzYzhjLi40MWFiODI3IDEwMDY0NAotLS0gYS9saWIvTWFrZWZpbGUuaW5jCisrKyBiL2xpYi9NYWtlZmlsZS5pbmMKQEAgLTEsMjggKzEsNDAgQEAKICMgLi9saWIvTWFrZWZpbGUuaW5jCisjIFVzaW5nIHRoZSBiYWNrc2xhc2ggYXMgbGluZSBjb250aW51YXRpb24gY2hhcmFjdGVyIG1pZ2h0IGJlIHByb2JsZW1hdGljCisjIHdpdGggc29tZSBtYWtlIGZsYXZvdXJzLCBhcyBXYXRjb20ncyB3bWFrZSBzaG93ZWQgdXMgYWxyZWFkeS4gSWYgd2UKKyMgZXZlciB3YW50IHRvIGNoYW5nZSB0aGlzIGluIGEgcG9ydGFibGUgbWFubmVyIHRoZW4gd2Ugc2hvdWxkIGNvbnNpZGVyCisjIHRoaXMgaWRlYSAocG9zdGVkIHRvIHRoZSBsaWJjdXJsIGxpc3QgYnkgQWRhbSBLZWxsYXMpOgorIyBDU1JDMSA9IGZpbGUxLmMgZmlsZTIuYyBmaWxlMy5jCisjIENTUkMyID0gZmlsZTQuYyBmaWxlNS5jIGZpbGU2LmMKKyMgQ1NPVVJDRVMgPSAkKENTUkMxKSAkKENTUkMyKQogCiBDU09VUkNFUyA9IGZpbGUuYyB0aW1ldmFsLmMgYmFzZTY0LmMgaG9zdGlwLmMgcHJvZ3Jlc3MuYyBmb3JtZGF0YS5jCVwKICAgY29va2llLmMgaHR0cC5jIHNlbmRmLmMgZnRwLmMgdXJsLmMgZGljdC5jIGlmMmlwLmMgc3BlZWRjaGVjay5jCVwKICAgbGRhcC5jIHNzbHVzZS5jIHZlcnNpb24uYyBnZXRlbnYuYyBlc2NhcGUuYyBtcHJpbnRmLmMgdGVsbmV0LmMJXAogICBuZXRyYy5jIGdldGluZm8uYyB0cmFuc2Zlci5jIHN0cmVxdWFsLmMgZWFzeS5jIHNlY3VyaXR5LmMga3JiNC5jCVwKLSAga3JiNS5jIG1lbWRlYnVnLmMgaHR0cF9jaHVua3MuYyBzdHJ0b2suYyBjb25uZWN0LmMgbGxpc3QuYyBoYXNoLmMJXAotICBtdWx0aS5jIGNvbnRlbnRfZW5jb2RpbmcuYyBzaGFyZS5jIGh0dHBfZGlnZXN0LmMgbWQ1LmMgY3VybF9yYW5kLmMJXAorICBjdXJsX2ZubWF0Y2guYyBmaWxlaW5mby5jIGZ0cGxpc3RwYXJzZXIuYyB3aWxkY2FyZC5jIGtyYjUuYwkJXAorICBtZW1kZWJ1Zy5jIGh0dHBfY2h1bmtzLmMgc3RydG9rLmMgY29ubmVjdC5jIGxsaXN0LmMgaGFzaC5jIG11bHRpLmMJXAorICBjb250ZW50X2VuY29kaW5nLmMgc2hhcmUuYyBodHRwX2RpZ2VzdC5jIG1kNC5jIG1kNS5jIGN1cmxfcmFuZC5jCVwKICAgaHR0cF9uZWdvdGlhdGUuYyBodHRwX250bG0uYyBpbmV0X3B0b24uYyBzdHJ0b29mZnQuYyBzdHJlcnJvci5jCVwKICAgaG9zdGFyZXMuYyBob3N0YXN5bi5jIGhvc3RpcDQuYyBob3N0aXA2LmMgaG9zdHN5bi5jIGhvc3R0aHJlLmMJXAogICBpbmV0X250b3AuYyBwYXJzZWRhdGUuYyBzZWxlY3QuYyBndGxzLmMgc3NsZ2VuLmMgdGZ0cC5jIHNwbGF5LmMJXAotICBzdHJkdXAuYyBzb2Nrcy5jIHNzaC5jIG5zcy5jIHFzc2wuYyByYXdzdHIuYyBjdXJsX2FkZHJpbmZvLmMgICAgICAgICAgXAorICBzdHJkdXAuYyBzb2Nrcy5jIHNzaC5jIG5zcy5jIHFzc2wuYyByYXdzdHIuYyBjdXJsX2FkZHJpbmZvLmMJCVwKICAgc29ja3NfZ3NzYXBpLmMgc29ja3Nfc3NwaS5jIGN1cmxfc3NwaS5jIHNsaXN0LmMgbm9uYmxvY2suYwkJXAogICBjdXJsX21lbXJjaHIuYyBpbWFwLmMgcG9wMy5jIHNtdHAuYyBwaW5ncG9uZy5jIHJ0c3AuYyBjdXJsX3RocmVhZHMuYwlcCi0gIHdhcm5sZXNzLmMKKyAgd2Fybmxlc3MuYyBobWFjLmMgcG9sYXJzc2wuYyBjdXJsX3J0bXAuYyBvcGVubGRhcC5jIGN1cmxfZ2V0aG9zdG5hbWUuY1wKKyAgZ29waGVyLmMKIAogSEhFQURFUlMgPSBhcnBhX3RlbG5ldC5oIG5ldHJjLmggZmlsZS5oIHRpbWV2YWwuaCBxc3NsLmggaG9zdGlwLmgJXAogICBwcm9ncmVzcy5oIGZvcm1kYXRhLmggY29va2llLmggaHR0cC5oIHNlbmRmLmggZnRwLmggdXJsLmggZGljdC5oCVwKICAgaWYyaXAuaCBzcGVlZGNoZWNrLmggdXJsZGF0YS5oIGN1cmxfbGRhcC5oIHNzbHVzZS5oIGVzY2FwZS5oIHRlbG5ldC5oCVwKICAgZ2V0aW5mby5oIHN0cmVxdWFsLmgga3JiNC5oIG1lbWRlYnVnLmggaHR0cF9jaHVua3MuaCBjdXJsX3JhbmQuaAlcCi0gIHN0cnRvay5oIGNvbm5lY3QuaCBsbGlzdC5oIGhhc2guaCBjb250ZW50X2VuY29kaW5nLmggc2hhcmUuaAkJXAorICBjdXJsX2ZubWF0Y2guaCB3aWxkY2FyZC5oIGZpbGVpbmZvLmggZnRwbGlzdHBhcnNlci5oIHN0cnRvay5oCQlcCisgIGNvbm5lY3QuaCBsbGlzdC5oIGhhc2guaCBjb250ZW50X2VuY29kaW5nLmggc2hhcmUuaCBjdXJsX21kNC5oCVwKICAgY3VybF9tZDUuaCBodHRwX2RpZ2VzdC5oIGh0dHBfbmVnb3RpYXRlLmggaHR0cF9udGxtLmggaW5ldF9wdG9uLmgJXAogICBzdHJ0b29mZnQuaCBzdHJlcnJvci5oIGluZXRfbnRvcC5oIGN1cmx4LmggY3VybF9tZW1vcnkuaCBzZXR1cC5oCVwKICAgdHJhbnNmZXIuaCBzZWxlY3QuaCBlYXN5aWYuaCBtdWx0aWlmLmggcGFyc2VkYXRlLmggc3NsZ2VuLmggZ3Rscy5oCVwKICAgdGZ0cC5oIHNvY2thZGRyLmggc3BsYXkuaCBzdHJkdXAuaCBzZXR1cF9vbmNlLmggc29ja3MuaCBzc2guaCBuc3NnLmgJXAogICBjdXJsX2Jhc2U2NC5oIHJhd3N0ci5oIGN1cmxfYWRkcmluZm8uaCBjdXJsX3NzcGkuaCBzbGlzdC5oIG5vbmJsb2NrLmgJXAogICBjdXJsX21lbXJjaHIuaCBpbWFwLmggcG9wMy5oIHNtdHAuaCBwaW5ncG9uZy5oIHJ0c3AuaCBjdXJsX3RocmVhZHMuaAlcCi0gIHdhcm5sZXNzLmgKKyAgd2Fybmxlc3MuaCBjdXJsX2htYWMuaCBwb2xhcnNzbC5oIGN1cmxfcnRtcC5oIGN1cmxfZ2V0aG9zdG5hbWUuaCAgICAgIFwKKyAgZ29waGVyLmgKKwpkaWZmIC0tZ2l0IGEvbGliL01ha2VmaWxlLm0zMiBiL2xpYi9NYWtlZmlsZS5tMzIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDhiNjY1YgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9NYWtlZmlsZS5tMzIKQEAgLTAsMCArMSwxNjcgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMKKyMjIE1ha2VmaWxlIGZvciBidWlsZGluZyBsaWJjdXJsLmEgd2l0aCBNaW5nVzMyIChHQ0MtMy4yIG9yIGxhdGVyKQorIyMgYW5kIG9wdGlvbmFsbHkgT3BlblNTTCAoMC45LjgpLCBsaWJzc2gyICgxLjIpLCB6bGliICgxLjIuNSkKKyMjCisjIyBVc2FnZToKKyMjIG1pbmd3MzItbWFrZSAtZiBNYWtlZmlsZS5tMzIgW1NTTD0xXSBbU1NIMj0xXSBbWkxJQj0xXSBbSUROPTFdIFtTU1BJPTFdIFtJUFY2PTFdIFtMREFQUz0xXSBbUlRNUD0xXSBbRFlOPTFdCisjIworIyMgSGludDogeW91IGNhbiBhbHNvIHNldCBlbnZpcm9ubWVudCB2YXJzIHRvIGNvbnRyb2wgdGhlIGJ1aWxkLCBmLmUuOgorIyMgc2V0IFpMSUJfUEFUSD1jOi96bGliLTEuMi41CisjIyBzZXQgWkxJQj0xCisjIworIyMgQ29tbWVudHMgdG86IFRyb3kgRW5nZWwgPHRlbmdlbEBzb25pYy5uZXQ+IG9yCisjIyAgICAgICAgICAgICAgSm9lcm4gSGFydHJvdGggPGhhcnRyb3RoQGFjbS5vcmc+CisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgRWRpdCB0aGUgcGF0aCBiZWxvdyB0byBwb2ludCB0byB0aGUgYmFzZSBvZiB5b3VyIFpsaWIgc291cmNlcy4KK2lmbmRlZiBaTElCX1BBVEgKK1pMSUJfUEFUSCA9IC4uLy4uL3psaWItMS4yLjUKK2VuZGlmCisjIEVkaXQgdGhlIHBhdGggYmVsb3cgdG8gcG9pbnQgdG8gdGhlIGJhc2Ugb2YgeW91ciBPcGVuU1NMIHBhY2thZ2UuCitpZm5kZWYgT1BFTlNTTF9QQVRICitPUEVOU1NMX1BBVEggPSAuLi8uLi9vcGVuc3NsLTAuOS44bworZW5kaWYKKyMgRWRpdCB0aGUgcGF0aCBiZWxvdyB0byBwb2ludCB0byB0aGUgYmFzZSBvZiB5b3VyIExpYlNTSDIgcGFja2FnZS4KK2lmbmRlZiBMSUJTU0gyX1BBVEgKK0xJQlNTSDJfUEFUSCA9IC4uLy4uL2xpYnNzaDItMS4yLjcKK2VuZGlmCisjIEVkaXQgdGhlIHBhdGggYmVsb3cgdG8gcG9pbnQgdG8gdGhlIGJhc2Ugb2YgeW91ciBsaWJpZG4gcGFja2FnZS4KK2lmbmRlZiBMSUJJRE5fUEFUSAorTElCSUROX1BBVEggPSAuLi8uLi9saWJpZG4tMS4xOAorZW5kaWYKKyMgRWRpdCB0aGUgcGF0aCBiZWxvdyB0byBwb2ludCB0byB0aGUgYmFzZSBvZiB5b3VyIGxpYnJ0bXAgcGFja2FnZS4KK2lmbmRlZiBMSUJSVE1QX1BBVEgKK0xJQlJUTVBfUEFUSCA9IC4uLy4uL2xpYnJ0bXAtMi4zCitlbmRpZgorIyBFZGl0IHRoZSBwYXRoIGJlbG93IHRvIHBvaW50IHRvIHRoZSBiYXNlIG9mIHlvdXIgTm92ZWxsIExEQVAgTkRLLgoraWZuZGVmIExEQVBfU0RLCitMREFQX1NESyA9IGM6L25vdmVsbC9uZGsvY2xkYXBzZGsvd2luMzIKK2VuZGlmCisKKyMgRWRpdCB0aGUgcGF0aCBiZWxvdyB0byBwb2ludCB0byB0aGUgYmFzZSBvZiB5b3VyIGMtYXJlcyBwYWNrYWdlLgoraWZuZGVmIExJQkNBUkVTX1BBVEgKK0xJQkNBUkVTX1BBVEggPSAuLi9hcmVzCitlbmRpZgorCitDQyA9IGdjYworQVIgPSBhcgorIyBjb21tZW50IExERkxBR1MgYmVsb3cgdG8ga2VlcCBkZWJ1ZyBpbmZvCitMREZMQUdTID0gLXMKK1JBTkxJQiA9IHJhbmxpYgorUkMgPSB3aW5kcmVzCitSQ0ZMQUdTID0gLS1pbmNsdWRlLWRpcj0uLi9pbmNsdWRlIC1EREVCVUdCVUlMRD0wIC1PIENPRkYgLWkKK1JNID0gZGVsIC9xIC9mIDI+TlVMCitTVFJJUCA9IHN0cmlwIC1nCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIyBOb3RoaW5nIG1vcmUgdG8gZG8gYmVsb3cgdGhpcyBsaW5lIQorCitJTkNMVURFUyA9IC1JLiAtSS4uL2luY2x1ZGUKK0NGTEFHUyA9IC1nIC1PMiAtREJVSUxESU5HX0xJQkNVUkwKK2lmZGVmIEFSRVMKKyAgSU5DTFVERVMgKz0gLUkkKExJQkNBUkVTX1BBVEgpCisgIENGTEFHUyArPSAtRFVTRV9BUkVTCisgIERMTF9MSUJTICs9IC1MJChMSUJDQVJFU19QQVRIKSAtbGNhcmVzCisgIGxpYmN1cmxfZGxsX0RFUEVOREVOQ0lFUyA9ICQoTElCQ0FSRVNfUEFUSCkvbGliY2FyZXMuYQorZW5kaWYKK2lmZGVmIFJUTVAKKyAgSU5DTFVERVMgKz0gLUkiJChMSUJSVE1QX1BBVEgpIgorICBDRkxBR1MgKz0gLURVU0VfTElCUlRNUAorICBETExfTElCUyArPSAtTCIkKExJQlJUTVBfUEFUSCkvbGlicnRtcCIgLWxydG1wIC1sd2lubW0KK2VuZGlmCitpZmRlZiBTU0gyCisgIElOQ0xVREVTICs9IC1JIiQoTElCU1NIMl9QQVRIKS9pbmNsdWRlIiAtSSIkKExJQlNTSDJfUEFUSCkvd2luMzIiCisgIENGTEFHUyArPSAtRFVTRV9MSUJTU0gyIC1ESEFWRV9MSUJTU0gyX0gKKyAgRExMX0xJQlMgKz0gLUwkKExJQlNTSDJfUEFUSCkvd2luMzIgLWxzc2gyCitlbmRpZgoraWZkZWYgU1NMCisgIElOQ0xVREVTICs9IC1JIiQoT1BFTlNTTF9QQVRIKS9vdXRpbmMiIC1JIiQoT1BFTlNTTF9QQVRIKS9vdXRpbmMvb3BlbnNzbCIKKyAgQ0ZMQUdTICs9IC1EVVNFX1NTTEVBWSAtRFVTRV9PUEVOU1NMIC1ESEFWRV9PUEVOU1NMX0VOR0lORV9IIC1ESEFWRV9PUEVOU1NMX1BLQ1MxMl9IIFwKKyAgICAgICAgICAgIC1ESEFWRV9FTkdJTkVfTE9BRF9CVUlMVElOX0VOR0lORVMgLURPUEVOU1NMX05PX0tSQjUgXAorICAgICAgICAgICAgLURDVVJMX1dBTlRTX0NBX0JVTkRMRV9FTlYKKyAgRExMX0xJQlMgKz0gLUwkKE9QRU5TU0xfUEFUSCkvb3V0IC1sZWF5MzIgLWxzc2wzMgorZW5kaWYKK2lmZGVmIFpMSUIKKyAgSU5DTFVERVMgKz0gLUkiJChaTElCX1BBVEgpIgorICBDRkxBR1MgKz0gLURIQVZFX0xJQlogLURIQVZFX1pMSUJfSAorICBETExfTElCUyArPSAtTCQoWkxJQl9QQVRIKSAtbHoKK2VuZGlmCitpZmRlZiBJRE4KKyAgSU5DTFVERVMgKz0gLUkiJChMSUJJRE5fUEFUSCkvaW5jbHVkZSIKKyAgQ0ZMQUdTICs9IC1EVVNFX0xJQklETgorICBETExfTElCUyArPSAtTCQoTElCSUROX1BBVEgpL2xpYiAtbGlkbgorZW5kaWYKK2lmZGVmIFNTUEkKKyAgQ0ZMQUdTICs9IC1EVVNFX1dJTkRPV1NfU1NQSQorZW5kaWYKK2lmZGVmIElQVjYKKyAgQ0ZMQUdTICs9IC1ERU5BQkxFX0lQVjYKK2VuZGlmCitpZmRlZiBMREFQUworICBDRkxBR1MgKz0gLURIQVZFX0xEQVBfU1NMCitlbmRpZgoraWZkZWYgVVNFX0xEQVBfTk9WRUxMCisgIElOQ0xVREVTICs9IC1JIiQoTERBUF9TREspL2luYyIKKyAgQ0ZMQUdTICs9IC1EQ1VSTF9IQVNfTk9WRUxMX0xEQVBTREsKKyAgRExMX0xJQlMgKz0gLUwiJChMREFQX1NESykvbGliL21zY3ZjIiAtbGxkYXBzZGsgLWxsZGFwc3NsIC1sbGRhcHgKK2VuZGlmCitpZmRlZiBVU0VfTERBUF9PUEVOTERBUAorICBJTkNMVURFUyArPSAtSSIkKExEQVBfU0RLKS9pbmNsdWRlIgorICBDRkxBR1MgKz0gLURDVVJMX0hBU19PUEVOTERBUF9MREFQU0RLCisgIERMTF9MSUJTICs9IC1MIiQoTERBUF9TREspL2xpYiIgLWxsZGFwIC1sbGJlcgorZW5kaWYKK2lmbmRlZiBVU0VfTERBUF9OT1ZFTEwKK2lmbmRlZiBVU0VfTERBUF9PUEVOTERBUAorRExMX0xJQlMgKz0gLWx3bGRhcDMyCitlbmRpZgorZW5kaWYKK0RMTF9MSUJTICs9IC1sd3MyXzMyCitDT01QSUxFID0gJChDQykgJChJTkNMVURFUykgJChDRkxBR1MpCisKKyMgTWFrZWZpbGUuaW5jIHByb3ZpZGVzIHRoZSBDU09VUkNFUyBhbmQgSEhFQURFUlMgZGVmaW5lcworaW5jbHVkZSBNYWtlZmlsZS5pbmMKKworbGliY3VybF9kbGxfTElCUkFSWSA9IGxpYmN1cmwuZGxsCitsaWJjdXJsX2RsbF9hX0xJQlJBUlkgPSBsaWJjdXJsZGxsLmEKK2xpYmN1cmxfYV9MSUJSQVJZID0gbGliY3VybC5hCisKK2xpYmN1cmxfYV9PQkpFQ1RTIDo9ICQocGF0c3Vic3QgJS5jLCUubywkKHN0cmlwICQoQ1NPVVJDRVMpKSkKK2xpYmN1cmxfYV9ERVBFTkRFTkNJRVMgOj0gJChzdHJpcCAkKENTT1VSQ0VTKSAkKEhIRUFERVJTKSkKKworUkVTT1VSQ0UgPSBsaWJjdXJsLnJlcworCisuU1VGRklYRVM6IC5yYyAucmVzCisKK2FsbDogJChsaWJjdXJsX2FfTElCUkFSWSkgJChsaWJjdXJsX2RsbF9MSUJSQVJZKQorCiskKGxpYmN1cmxfYV9MSUJSQVJZKTogJChsaWJjdXJsX2FfT0JKRUNUUykgJChsaWJjdXJsX2FfREVQRU5ERU5DSUVTKQorCS0kKFJNKSAkQAorCSQoQVIpIGNydSAkQCAkKGxpYmN1cmxfYV9PQkpFQ1RTKQorCSQoUkFOTElCKSAkQAorCSQoU1RSSVApICRACisKKyMgcmVtb3ZlIHRoZSBsYXN0IGxpbmUgYWJvdmUgdG8ga2VlcCBkZWJ1ZyBpbmZvCisKKyQobGliY3VybF9kbGxfTElCUkFSWSk6ICQobGliY3VybF9hX09CSkVDVFMpICQoUkVTT1VSQ0UpICQobGliY3VybF9kbGxfREVQRU5ERU5DSUVTKQorCS0kKFJNKSAkQAorCSQoQ0MpICQoTERGTEFHUykgLXNoYXJlZCAtV2wsLS1vdXQtaW1wbGliLCQobGliY3VybF9kbGxfYV9MSUJSQVJZKSBcCisJICAtbyAkQCAkKGxpYmN1cmxfYV9PQkpFQ1RTKSAkKFJFU09VUkNFKSAkKERMTF9MSUJTKQorCisuYy5vOgorCSQoQ09NUElMRSkgLWMgJDwKKworLnJjLnJlczoKKwkkKFJDKSAkKFJDRkxBR1MpICQ8IC1vICRACisKK2NsZWFuOgorCS0kKFJNKSAkKGxpYmN1cmxfYV9PQkpFQ1RTKSAkKFJFU09VUkNFKQorCitkaXN0Y2xlYW4gdmNsZWFuOiBjbGVhbgorCS0kKFJNKSAkKGxpYmN1cmxfYV9MSUJSQVJZKSAkKGxpYmN1cmxfZGxsX0xJQlJBUlkpICQobGliY3VybF9kbGxfYV9MSUJSQVJZKQorCitGT1JDRTogOworCiskKExJQkNBUkVTX1BBVEgpL2xpYmNhcmVzLmE6CisJJChNQUtFKSAtQyAkKExJQkNBUkVTX1BBVEgpIC1mIE1ha2VmaWxlLm0zMgorCmRpZmYgLS1naXQgYS9saWIvTWFrZWZpbGUubmV0d2FyZSBiL2xpYi9NYWtlZmlsZS5uZXR3YXJlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1NWM3ZTMKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvTWFrZWZpbGUubmV0d2FyZQpAQCAtMCwwICsxLDY2NyBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMKKyMjIE1ha2VmaWxlIGZvciBidWlsZGluZyBsaWJjdXJsLm5sbSAoTmV0V2FyZSB2ZXJzaW9uIC0gZ251IG1ha2UpCisjIyBVc2U6IG1ha2UgLWYgTWFrZWZpbGUubmV0d2FyZQorIyMKKyMjIENvbW1lbnRzIHRvOiBHdWVudGVyIEtuYXVmIGh0dHA6Ly93d3cuZ2tudy5uZXQvcGhwYmIKKyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgRWRpdCB0aGUgcGF0aCBiZWxvdyB0byBwb2ludCB0byB0aGUgYmFzZSBvZiB5b3VyIE5vdmVsbCBOREsuCitpZm5kZWYgTkRLQkFTRQorTkRLQkFTRQk9IGM6L25vdmVsbAorZW5kaWYKKworIyBFZGl0IHRoZSBwYXRoIGJlbG93IHRvIHBvaW50IHRvIHRoZSBiYXNlIG9mIHlvdXIgWmxpYiBzb3VyY2VzLgoraWZuZGVmIFpMSUJfUEFUSAorWkxJQl9QQVRIID0gLi4vLi4vemxpYi0xLjIuNQorZW5kaWYKKworIyBFZGl0IHRoZSBwYXRoIGJlbG93IHRvIHBvaW50IHRvIHRoZSBiYXNlIG9mIHlvdXIgT3BlblNTTCBwYWNrYWdlLgoraWZuZGVmIE9QRU5TU0xfUEFUSAorT1BFTlNTTF9QQVRIID0gLi4vLi4vb3BlbnNzbC0wLjkuOG8KK2VuZGlmCisKKyMgRWRpdCB0aGUgcGF0aCBiZWxvdyB0byBwb2ludCB0byB0aGUgYmFzZSBvZiB5b3VyIExpYlNTSDIgcGFja2FnZS4KK2lmbmRlZiBMSUJTU0gyX1BBVEgKK0xJQlNTSDJfUEFUSCA9IC4uLy4uL2xpYnNzaDItMS4yLjcKK2VuZGlmCisKKyMgRWRpdCB0aGUgcGF0aCBiZWxvdyB0byBwb2ludCB0byB0aGUgYmFzZSBvZiB5b3VyIGxpYmlkbiBwYWNrYWdlLgoraWZuZGVmIExJQklETl9QQVRICitMSUJJRE5fUEFUSCA9IC4uLy4uL2xpYmlkbi0xLjE4CitlbmRpZgorCisjIEVkaXQgdGhlIHBhdGggYmVsb3cgdG8gcG9pbnQgdG8gdGhlIGJhc2Ugb2YgeW91ciBsaWJydG1wIHBhY2thZ2UuCitpZm5kZWYgTElCUlRNUF9QQVRICitMSUJSVE1QX1BBVEggPSAuLi8uLi9saWJydG1wLTIuMworZW5kaWYKKworIyBFZGl0IHRoZSBwYXRoIGJlbG93IHRvIHBvaW50IHRvIHRoZSBiYXNlIG9mIHlvdXIgYy1hcmVzIHBhY2thZ2UuCitpZm5kZWYgTElCQ0FSRVNfUEFUSAorTElCQ0FSRVNfUEFUSCA9IC4uL2FyZXMKK2VuZGlmCisKK2lmbmRlZiBJTlNURElSCitJTlNURElSCT0gLi4kKERTKWN1cmwtJChMSUJDVVJMX1ZFUlNJT05fU1RSKS1iaW4tbncKK2VuZGlmCisKKyMgRWRpdCB0aGUgdmFycyBiZWxvdyB0byBjaGFuZ2UgTkxNIHRhcmdldCBzZXR0aW5ncy4KK1RBUkdFVCAgPSBsaWJjdXJsCitWRVJTSU9OCT0gJChMSUJDVVJMX1ZFUlNJT04pCitDT1BZUgk9IENvcHlyaWdodCAoQykgJChMSUJDVVJMX0NPUFlSSUdIVF9TVFIpCitERVNDUgk9IGNVUkwgbGliY3VybCAkKExJQkNVUkxfVkVSU0lPTl9TVFIpICgkKExJQkFSQ0gpKSAtIGh0dHA6Ly9jdXJsLmhheHguc2UKK01UU0FGRQk9IFlFUworU1RBQ0sJPSA2NDAwMAorU0NSRUVOCT0gbm9uZQorRVhQT1JUUwk9IEBsaWJjdXJsLmltcAorCisjIFVuY29tbWVudCB0aGUgbmV4dCBsaW5lIHRvIGVuYWJsZSBsaW5raW5nIHdpdGggUE9TSVggc2VtYW50aWNzLgorIyBQT1NJWEZMID0gMQorCisjIEVkaXQgdGhlIHZhciBiZWxvdyB0byBwb2ludCB0byB5b3VyIGxpYiBhcmNoaXRlY3R1cmUuCitpZm5kZWYgTElCQVJDSAorTElCQVJDSCA9IExJQkMKK2VuZGlmCisKKyMgbXVzdCBiZSBlcXVhbCB0byBOREVCVUcgb3IgREVCVUcsIENVUkxERUJVRworaWZuZGVmIERCCitEQgk9IE5ERUJVRworZW5kaWYKKyMgT3B0aW1pemF0aW9uOiAtTzxuPiBvciBkZWJ1Z2dpbmc6IC1nCitpZmVxICgkKERCKSxOREVCVUcpCisJT1BUCT0gLU8yCisJT0JKRElSCT0gcmVsZWFzZQorZWxzZQorCU9QVAk9IC1nCisJT0JKRElSCT0gZGVidWcKK2VuZGlmCisKKyMgVGhlIGZvbGxvd2luZyBsaW5lcyBkZWZpbmVzIHlvdXIgY29tcGlsZXIuCitpZmRlZiBDV0ZvbGRlcgorCU1FVFJPV0VSS1MgPSAkKENXRm9sZGVyKQorZW5kaWYKK2lmZGVmIE1FVFJPV0VSS1MKKwkjIE1XQ1dfUEFUSCA9ICQoc3Vic3QgXCwvLCQoTUVUUk9XRVJLUykpL05vdmVsbCBTdXBwb3J0CisJTVdDV19QQVRIID0gJChzdWJzdCBcLC8sJChNRVRST1dFUktTKSkvTm92ZWxsIFN1cHBvcnQvTWV0cm93ZXJrcyBTdXBwb3J0CisJQ0MgPSBtd2NjbmxtCitlbHNlCisJQ0MgPSBnY2MKK2VuZGlmCitQRVJMCT0gcGVybAorIyBIZXJlIHlvdSBjYW4gZmluZCBhIG5hdGl2ZSBXaW4zMiBiaW5hcnkgb2YgdGhlIG9yaWdpbmFsIGF3azoKKyMgaHR0cDovL3d3dy5na253Lm5ldC9kZXZlbG9wbWVudC9wcmd0b29scy9hd2stMjAwNzA1MDEuemlwCitBV0sJPSBhd2sKK0NQCT0gY3AgLWFmdgorTUtESVIJPSBta2RpcgorIyBSTQk9IHJtIC1mCisjIElmIHlvdSB3YW50IHRvIG1hcmsgdGhlIHRhcmdldCBhcyBNVFNBRkUgeW91IHdpbGwgbmVlZCBhIHRvb2wgZm9yCisjIGdlbmVyYXRpbmcgdGhlIHhkYyBkYXRhIGZvciB0aGUgbGlua2VyOyBoZXJlJ3MgYSBtaW5pbWFsIHRvb2w6CisjIGh0dHA6Ly93d3cuZ2tudy5uZXQvZGV2ZWxvcG1lbnQvcHJndG9vbHMvbWt4ZGMuemlwCitNUEtYREMJPSBta3hkYworCisjIExJQkFSQ0hfVSA9ICQoc2hlbGwgJChBV0spICdCRUdJTiB7cHJpbnQgdG91cHBlcihBUkdWWzFdKX0nICQoTElCQVJDSCkpCitMSUJBUkNIX0wgPSAkKHNoZWxsICQoQVdLKSAnQkVHSU4ge3ByaW50IHRvbG93ZXIoQVJHVlsxXSl9JyAkKExJQkFSQ0gpKQorCisjIEluY2x1ZGUgdGhlIHZlcnNpb24gaW5mbyByZXRyaWV2ZWQgZnJvbSBjdXJsdmVyLmgKKy1pbmNsdWRlICQoT0JKRElSKS92ZXJzaW9uLmluYworCisjIEdsb2JhbCBmbGFncyBmb3IgYWxsIGNvbXBpbGVycworQ0ZMQUdTCSs9ICQoT1BUKSAtRCQoREIpIC1ETkVUV0FSRSAtREhBVkVfQ09ORklHX0ggLW5vc3RkaW5jCisKK2lmZXEgKCQoQ0MpLG13Y2NubG0pCitMRAk9IG13bGRubG0KK0xERkxBR1MJPSAtbm9zdGRsaWIgJChQUkVMVURFKSAkKE9CSkwpIC1vICRAIC1jb21tYW5kZmlsZQorQVIJPSBtd2xkbmxtCitBUkZMQUdTCT0gLW5vc3RkbGliIC10eXBlIGxpYnJhcnkgLW8KK0xJQkVYVAk9IGxpYgorI1JBTkxJQgk9CitDRkxBR1MJKz0gLW1zZ3N0eWxlIGdjYyAtZ2NjaW5jIC1pbmxpbmUgb2ZmIC1vcHQgbm9pbnRyaW5zaWNzIC1wcm9jIDU4NgorQ0ZMQUdTCSs9IC1yZWxheF9wb2ludGVycworI0NGTEFHUwkrPSAtdyBvbgoraWZlcSAoJChMSUJBUkNIKSxMSUJDKQoraWZlcSAoJChQT1NJWEZMKSwxKQorCVBSRUxVREUgPSAkKE5ES19MSUJDKS9pbXBvcnRzL3Bvc2l4cHJlLm8KK2Vsc2UKKwlQUkVMVURFID0gJChOREtfTElCQykvaW1wb3J0cy9saWJjcHJlLm8KK2VuZGlmCisJQ0ZMQUdTICs9IC1hbGlnbiA0CitlbHNlCisJIyBQUkVMVURFID0gJChOREtfQ0xJQikvaW1wb3J0cy9jbGlicHJlLm8KKwkjIHRvIGF2b2lkIHRoZSBfX2luaXRfKiAvIF9fZGVpbml0Xyogd2hvZXMgZG9udCB1c2UgcHJlbHVkZSBmcm9tIE5ESworCVBSRUxVREUgPSAiJChNV0NXX1BBVEgpL2xpYnJhcmllcy9ydW50aW1lL3ByZWx1ZGUub2JqIgorCSMgQ0ZMQUdTICs9IC1pbmNsdWRlICIkKE1XQ1dfUEFUSCkvaGVhZGVycy9ubG1fY2xpYl9wcmVmaXguaCIKKwlDRkxBR1MgKz0gLWFsaWduIDEKK2VuZGlmCitlbHNlCitMRAk9IG5sbWNvbnYKK0xERkxBR1MJPSAtVAorQVIJPSBhcgorQVJGTEFHUwk9IC1jcQorTElCRVhUCT0gYQorUkFOTElCCT0gcmFubGliCitDRkxBR1MJKz0gLWZuby1idWlsdGluIC1mcGNjLXN0cnVjdC1yZXR1cm4gLWZuby1zdHJpY3QtYWxpYXNpbmcKK0NGTEFHUwkrPSAtV2FsbCAjIC1wZWRhbnRpYworaWZlcSAoJChMSUJBUkNIKSxMSUJDKQoraWZlcSAoJChQT1NJWEZMKSwxKQorCVBSRUxVREUgPSAkKE5ES19MSUJDKS9pbXBvcnRzL3Bvc2l4cHJlLmdjYy5vCitlbHNlCisJUFJFTFVERSA9ICQoTkRLX0xJQkMpL2ltcG9ydHMvbGliY3ByZS5nY2MubworZW5kaWYKK2Vsc2UKKwlQUkVMVURFID0gJChOREtfQ0xJQikvaW1wb3J0cy9jbGlicHJlLmdjYy5vCisJIyB0byBhdm9pZCB0aGUgX19pbml0XyogLyBfX2RlaW5pdF8qIHdob2VzIGRvbnQgdXNlIHByZWx1ZGUgZnJvbSBOREsKKwkjIGh0dHA6Ly93d3cuZ2tudy5uZXQvZGV2ZWxvcG1lbnQvbWtfbmxtL2djY19wcmUuemlwCisJIyBQUkVMVURFID0gJChOREtfUk9PVCkvcHJlL3ByZWx1ZGUubworCUNGTEFHUyArPSAtaW5jbHVkZSAkKE5ES0JBU0UpL25sbWNvbnYvZ2VubG0uaAorZW5kaWYKK2VuZGlmCisKK05ES19ST09UID0gJChOREtCQVNFKS9uZGsKK2lmbmRlZiBOREtfQ0xJQgorTkRLX0NMSUIgPSAkKE5ES19ST09UKS9ud3NkaworZW5kaWYKK2lmbmRlZiBOREtfTElCQworTkRLX0xJQkMgPSAkKE5ES19ST09UKS9saWJjCitlbmRpZgoraWZuZGVmIE5ES19MREFQCitOREtfTERBUCA9ICQoTkRLX1JPT1QpL2NsZGFwc2RrL25ldHdhcmUKK2VuZGlmCitDVVJMX0lOQyA9IC4uL2luY2x1ZGUKK0NVUkxfTElCID0gLi4vbGliCisKK0lOQ0xVREVTID0gLUkkKENVUkxfSU5DKSAtSSQoQ1VSTF9MSUIpCisKK2lmZGVmIFdJVEhfQVJFUworCUlOQ0xVREVTICs9IC1JJChMSUJDQVJFU19QQVRIKQorCUxETElCUyArPSAkKExJQkNBUkVTX1BBVEgpL2xpYmNhcmVzLiQoTElCRVhUKQorZW5kaWYKK2lmZGVmIFdJVEhfU1NIMgorCUlOQ0xVREVTICs9IC1JJChMSUJTU0gyX1BBVEgpL2luY2x1ZGUKK2lmZGVmIExJTktfU1RBVElDCisJTERMSUJTICs9ICQoTElCU1NIMl9QQVRIKS9udy9saWJzc2gyLiQoTElCRVhUKQorZWxzZQorCU1PRFVMRVMgKz0gbGlic3NoMi5ubG0KKwlJTVBPUlRTICs9IEAkKExJQlNTSDJfUEFUSCkvbncvbGlic3NoMi5pbXAKK2VuZGlmCitlbmRpZgoraWZkZWYgV0lUSF9SVE1QCisJSU5DTFVERVMgKz0gLUkkKExJQlJUTVBfUEFUSCkKKwlMRExJQlMgKz0gJChMSUJSVE1QX1BBVEgpL2xpYnJ0bXAvbGlicnRtcC4kKExJQkVYVCkKK2VuZGlmCitpZmRlZiBXSVRIX1NTTAorCUlOQ0xVREVTICs9IC1JJChPUEVOU1NMX1BBVEgpL291dGluY19ud18kKExJQkFSQ0hfTCkKKwlMRExJQlMgKz0gJChPUEVOU1NMX1BBVEgpL291dF9ud18kKExJQkFSQ0hfTCkvc3NsLiQoTElCRVhUKQorCUxETElCUyArPSAkKE9QRU5TU0xfUEFUSCkvb3V0X253XyQoTElCQVJDSF9MKS9jcnlwdG8uJChMSUJFWFQpCisJSU1QT1JUUyArPSBHZXRQcm9jZXNzU3dpdGNoQ291bnQgUnVubmluZ1Byb2Nlc3MKKwlJTlNUREVQICs9IGNhLWJ1bmRsZS5jcnQKK2VuZGlmCitpZmRlZiBXSVRIX1pMSUIKKwlJTkNMVURFUyArPSAtSSQoWkxJQl9QQVRIKQoraWZkZWYgTElOS19TVEFUSUMKKwlMRExJQlMgKz0gJChaTElCX1BBVEgpL253LyQoTElCQVJDSCkvbGliei4kKExJQkVYVCkKK2Vsc2UKKwlNT0RVTEVTICs9IGxpYnoubmxtCisJSU1QT1JUUyArPSBAJChaTElCX1BBVEgpL253LyQoTElCQVJDSCkvbGliei5pbXAKK2VuZGlmCitlbmRpZgoraWZkZWYgV0lUSF9JRE4KKwlJTkNMVURFUyArPSAtSSQoTElCSUROX1BBVEgpL2luY2x1ZGUKKwlMRExJQlMgKz0gJChMSUJJRE5fUEFUSCkvbGliL2xpYmlkbi4kKExJQkVYVCkKK2VuZGlmCisKK2lmZXEgKCQoTElCQVJDSCksTElCQykKKwlJTkNMVURFUyArPSAtSSQoTkRLX0xJQkMpL2luY2x1ZGUKKwkjIElOQ0xVREVTICs9IC1JJChOREtfTElCQykvaW5jbHVkZS9ua3MKKwkjIElOQ0xVREVTICs9IC1JJChOREtfTElCQykvaW5jbHVkZS93aW5zb2NrCisJQ0ZMQUdTICs9IC1EX1BPU0lYX1NPVVJDRQorZWxzZQorCUlOQ0xVREVTICs9IC1JJChOREtfQ0xJQikvaW5jbHVkZS9ubG0KKwkjIElOQ0xVREVTICs9IC1JJChOREtfQ0xJQikvaW5jbHVkZS9ubG0vb2Jzb2xldGUKKwkjIElOQ0xVREVTICs9IC1JJChOREtfQ0xJQikvaW5jbHVkZQorZW5kaWYKK2lmbmRlZiBESVNBQkxFX0xEQVAKKwlJTkNMVURFUyArPSAtSSQoTkRLX0xEQVApLyQoTElCQVJDSF9MKS9pbmMKK2VuZGlmCitDRkxBR1MJKz0gJChJTkNMVURFUykKKworaWZlcSAoJChNVFNBRkUpLFlFUykKKwlYRENPUFQgPSAtbgorZW5kaWYKK2lmZXEgKCQoTVRTQUZFKSxOTykKKwlYRENPUFQgPSAtdQorZW5kaWYKK2lmZGVmIFhEQ09QVAorCVhEQ0RBVEEgPSAkKE9CSkRJUikvJChUQVJHRVQpLnhkYworZW5kaWYKKworaWZlcSAoJChmaW5kc3RyaW5nIC9zaCwkKFNIRUxMKSksL3NoKQorREwJPSAnCitEUwk9IC8KK1BDVAk9ICUKKyMtaW5jbHVkZSAkKE5ES0JBU0UpL25sbWNvbnYvbmNwZnMuaW5jCitlbHNlCitEUwk9IFxcCitQQ1QJPSAlJQorZW5kaWYKKworIyBNYWtlZmlsZS5pbmMgcHJvdmlkZXMgdGhlIENTT1VSQ0VTIGFuZCBISEVBREVSUyBkZWZpbmVzCitpbmNsdWRlIE1ha2VmaWxlLmluYworCitPQkpTCTo9ICQocGF0c3Vic3QgJS5jLCQoT0JKRElSKS8lLm8sJChzdHJpcCAkKENTT1VSQ0VTKSkpICQoT0JKRElSKS9ud29zLm8KKworT0JKTAk9ICQoT0JKUykgJChPQkpESVIpL253bGliLm8gJChMRExJQlMpCisKK2FsbDogbGliIG5sbQorCitubG06IHByZWJ1aWxkICQoVEFSR0VUKS5ubG0KKworbGliOiBwcmVidWlsZCAkKFRBUkdFVCkuJChMSUJFWFQpCisKK3ByZWJ1aWxkOiAkKE9CSkRJUikgJChDVVJMX0lOQykvY3VybC9jdXJsYnVpbGQuaCAkKE9CSkRJUikvdmVyc2lvbi5pbmMgY3VybF9jb25maWcuaAorCiskKE9CSkRJUikvJS5vOiAlLmMKKyMJQGVjaG8gQ29tcGlsaW5nICQ8CisJJChDQykgJChDRkxBR1MpIC1jICQ8IC1vICRACisKKyQoT0JKRElSKS92ZXJzaW9uLmluYzogLi4vaW5jbHVkZS9jdXJsL2N1cmx2ZXIuaCAkKE9CSkRJUikKKwlAZWNobyBDcmVhdGluZyAkQAorCUAkKEFXSykgLWYgLi4vcGFja2FnZXMvTmV0V2FyZS9nZXRfdmVyLmF3ayAkPCA+ICRACisKK2luc3RhbGw6ICQoSU5TVERJUikgYWxsICQoSU5TVERFUCkKKwlAJChDUCkgJChUQVJHRVQpLm5sbSAkKElOU1RESVIpCisJQCQoQ1ApICQoVEFSR0VUKS4kKExJQkVYVCkgJChJTlNURElSKQorCUAkKENQKSAuLi9DSEFOR0VTICQoSU5TVERJUikKKwlAJChDUCkgLi4vQ09QWUlORyAkKElOU1RESVIpCisJQCQoQ1ApIC4uL1JFQURNRSAkKElOU1RESVIpCisJQCQoQ1ApIC4uL1JFTEVBU0UtTk9URVMgJChJTlNURElSKQoraWZkZWYgV0lUSF9TU0wKKwlALSQoQ1ApIGNhLWJ1bmRsZS5jcnQgJChJTlNURElSKS9jYS1idW5kbGUuY3J0CitlbmRpZgorCitjbGVhbjoKKwktJChSTSkgY3VybF9jb25maWcuaAorCS0kKFJNKSAtciAkKE9CSkRJUikKKworZGlzdGNsZWFuIHZjbGVhbjogY2xlYW4KKwktJChSTSkgJChUQVJHRVQpLiQoTElCRVhUKSAkKFRBUkdFVCkubmxtCisJLSQoUk0pIGNlcnRkYXRhLnR4dCBjYS1idW5kbGUuY3J0CisKKyQoT0JKRElSKSAkKElOU1RESVIpOgorCUAkKE1LRElSKSAkQAorCiskKFRBUkdFVCkuJChMSUJFWFQpOiAkKE9CSlMpCisJQGVjaG8gQ3JlYXRpbmcgJEAKKwlALSQoUk0pICRACisJQCQoQVIpICQoQVJGTEFHUykgJEAgJF4KK2lmZGVmIFJBTkxJQgorCUAkKFJBTkxJQikgJEAKK2VuZGlmCisKKyQoVEFSR0VUKS5ubG06ICQoT0JKRElSKS8kKFRBUkdFVCkuZGVmICQoT0JKTCkgJChYRENEQVRBKQorCUBlY2hvIExpbmtpbmcgJEAKKwlALSQoUk0pICRACisJQCQoTEQpICQoTERGTEFHUykgJDwKKworJChPQkpESVIpLyUueGRjOiBNYWtlZmlsZS5uZXR3YXJlCisJQGVjaG8gQ3JlYXRpbmcgJEAKKwlAJChNUEtYREMpICQoWERDT1BUKSAkQAorCiskKE9CSkRJUikvJS5kZWY6IE1ha2VmaWxlLm5ldHdhcmUKKwlAZWNobyAkKERMKSMgREVGIGZpbGUgZm9yIGxpbmtpbmcgd2l0aCAkKExEKSQoREwpID4gJEAKKwlAZWNobyAkKERMKSMgRG8gbm90IGVkaXQgdGhpcyBmaWxlIC0gaXQgaXMgY3JlYXRlZCBieSBtYWtlISQoREwpID4+ICRACisJQGVjaG8gJChETCkjIEFsbCB5b3VyIGNoYW5nZXMgd2lsbCBiZSBsb3N0ISEkKERMKSA+PiAkQAorCUBlY2hvICQoREwpIyQoREwpID4+ICRACisJQGVjaG8gJChETCljb3B5cmlnaHQgIiQoQ09QWVIpIiQoREwpID4+ICRACisJQGVjaG8gJChETClkZXNjcmlwdGlvbiAiJChERVNDUikiJChETCkgPj4gJEAKKwlAZWNobyAkKERMKXZlcnNpb24gJChWRVJTSU9OKSQoREwpID4+ICRACitpZmRlZiBOTE1UWVBFCisJQGVjaG8gJChETCl0eXBlICQoTkxNVFlQRSkkKERMKSA+PiAkQAorZW5kaWYKK2lmZGVmIFNUQUNLCisJQGVjaG8gJChETClzdGFjayAkKFNUQUNLKSQoREwpID4+ICRACitlbmRpZgoraWZkZWYgU0NSRUVOCisJQGVjaG8gJChETClzY3JlZW5uYW1lICIkKFNDUkVFTikiJChETCkgPj4gJEAKK2Vsc2UKKwlAZWNobyAkKERMKXNjcmVlbm5hbWUgIkRFRkFVTFQiJChETCkgPj4gJEAKK2VuZGlmCitpZm5lcSAoJChEQiksTkRFQlVHKQorCUBlY2hvICQoREwpZGVidWckKERMKSA+PiAkQAorZW5kaWYKKwlAZWNobyAkKERMKXRocmVhZG5hbWUgIiQoVEFSR0VUKSIkKERMKSA+PiAkQAoraWZkZWYgWERDREFUQQorCUBlY2hvICQoREwpeGRjZGF0YSAkKFhEQ0RBVEEpJChETCkgPj4gJEAKK2VuZGlmCisJQGVjaG8gJChETClmbGFnX29uIDY0JChETCkgPj4gJEAKK2lmZXEgKCQoTElCQVJDSCksQ0xJQikKKwlAZWNobyAkKERMKXN0YXJ0IF9QcmVsdWRlJChETCkgPj4gJEAKKwlAZWNobyAkKERMKWV4aXQgX1N0b3AkKERMKSA+PiAkQAorCUBlY2hvICQoREwpaW1wb3J0IEAkKE5ES19DTElCKS9pbXBvcnRzL2NsaWIuaW1wJChETCkgPj4gJEAKKwlAZWNobyAkKERMKWltcG9ydCBAJChOREtfQ0xJQikvaW1wb3J0cy90aHJlYWRzLmltcCQoREwpID4+ICRACisJQGVjaG8gJChETClpbXBvcnQgQCQoTkRLX0NMSUIpL2ltcG9ydHMvbmxtbGliLmltcCQoREwpID4+ICRACisJQGVjaG8gJChETClpbXBvcnQgQCQoTkRLX0NMSUIpL2ltcG9ydHMvc29ja2xpYi5pbXAkKERMKSA+PiAkQAorCUBlY2hvICQoREwpbW9kdWxlIGNsaWIkKERMKSA+PiAkQAoraWZuZGVmIERJU0FCTEVfTERBUAorCUBlY2hvICQoREwpaW1wb3J0IEAkKE5ES19MREFQKS9jbGliL2ltcG9ydHMvbGRhcHNkay5pbXAkKERMKSA+PiAkQAorCUBlY2hvICQoREwpaW1wb3J0IEAkKE5ES19MREFQKS9jbGliL2ltcG9ydHMvbGRhcHNzbC5pbXAkKERMKSA+PiAkQAorIwlAZWNobyAkKERMKWltcG9ydCBAJChOREtfTERBUCkvY2xpYi9pbXBvcnRzL2xkYXB4LmltcCQoREwpID4+ICRACisJQGVjaG8gJChETCltb2R1bGUgbGRhcHNkayBsZGFwc3NsJChETCkgPj4gJEAKK2VuZGlmCitlbHNlCitpZmVxICgkKFBPU0lYRkwpLDEpCisJQGVjaG8gJChETClmbGFnX29uIDQxOTQzMDQkKERMKSA+PiAkQAorZW5kaWYKKwlAZWNobyAkKERMKXBzZXVkb3ByZWVtcHRpb24kKERMKSA+PiAkQAoraWZlcSAoJChmaW5kc3RyaW5nIHBvc2l4cHJlLCQoUFJFTFVERSkpLHBvc2l4cHJlKQorCUBlY2hvICQoREwpc3RhcnQgUE9TSVhfU3RhcnQkKERMKSA+PiAkQAorCUBlY2hvICQoREwpZXhpdCBQT1NJWF9TdG9wJChETCkgPj4gJEAKKwlAZWNobyAkKERMKWNoZWNrIFBPU0lYX0NoZWNrVW5sb2FkJChETCkgPj4gJEAKK2Vsc2UKKwlAZWNobyAkKERMKXN0YXJ0IF9MaWJDUHJlbHVkZSQoREwpID4+ICRACisJQGVjaG8gJChETClleGl0IF9MaWJDUG9zdGx1ZGUkKERMKSA+PiAkQAorCUBlY2hvICQoREwpY2hlY2sgX0xpYkNDaGVja1VubG9hZCQoREwpID4+ICRACitlbmRpZgorCUBlY2hvICQoREwpaW1wb3J0IEAkKE5ES19MSUJDKS9pbXBvcnRzL2xpYmMuaW1wJChETCkgPj4gJEAKKwlAZWNobyAkKERMKWltcG9ydCBAJChOREtfTElCQykvaW1wb3J0cy9uZXR3YXJlLmltcCQoREwpID4+ICRACisJQGVjaG8gJChETCltb2R1bGUgbGliYyQoREwpID4+ICRACitpZm5kZWYgRElTQUJMRV9MREFQCisJQGVjaG8gJChETClpbXBvcnQgQCQoTkRLX0xEQVApL2xpYmMvaW1wb3J0cy9sbGRhcHNkay5pbXAkKERMKSA+PiAkQAorCUBlY2hvICQoREwpaW1wb3J0IEAkKE5ES19MREFQKS9saWJjL2ltcG9ydHMvbGxkYXBzc2wuaW1wJChETCkgPj4gJEAKKyMJQGVjaG8gJChETClpbXBvcnQgQCQoTkRLX0xEQVApL2xpYmMvaW1wb3J0cy9sbGRhcHguaW1wJChETCkgPj4gJEAKKwlAZWNobyAkKERMKW1vZHVsZSBsbGRhcHNkayBsbGRhcHNzbCQoREwpID4+ICRACitlbmRpZgorZW5kaWYKK2lmZGVmIE1PRFVMRVMKKwlAZWNobyAkKERMKW1vZHVsZSAkKE1PRFVMRVMpJChETCkgPj4gJEAKK2VuZGlmCitpZmRlZiBFWFBPUlRTCisJQGVjaG8gJChETClleHBvcnQgJChFWFBPUlRTKSQoREwpID4+ICRACitlbmRpZgoraWZkZWYgSU1QT1JUUworCUBlY2hvICQoREwpaW1wb3J0ICQoSU1QT1JUUykkKERMKSA+PiAkQAorZW5kaWYKK2lmZXEgKCQoZmluZHN0cmluZyBubG1jb252LCQoTEQpKSxubG1jb252KQorCUBlY2hvICQoREwpaW5wdXQgJChQUkVMVURFKSQoREwpID4+ICRACisJQGVjaG8gJChETClpbnB1dCAkKE9CSkwpJChETCkgPj4gJEAKKyNpZmRlZiBMRExJQlMKKyMJQGVjaG8gJChETClpbnB1dCAkKExETElCUykkKERMKSA+PiAkQAorI2VuZGlmCisJQGVjaG8gJChETClvdXRwdXQgJChUQVJHRVQpLm5sbSQoREwpID4+ICRACitlbmRpZgorCitjdXJsX2NvbmZpZy5oOiBNYWtlZmlsZS5uZXR3YXJlCisJQGVjaG8gQ3JlYXRpbmcgJEAKKwlAZWNobyAkKERMKS8qICRAIGZvciBOZXRXYXJlIHRhcmdldC4kKERMKSA+ICRACisJQGVjaG8gJChETCkqKiBEbyBub3QgZWRpdCB0aGlzIGZpbGUgLSBpdCBpcyBjcmVhdGVkIGJ5IG1ha2UhJChETCkgPj4gJEAKKwlAZWNobyAkKERMKSoqIEFsbCB5b3VyIGNoYW5nZXMgd2lsbCBiZSBsb3N0ISEkKERMKSA+PiAkQAorCUBlY2hvICQoREwpKi8kKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2lmbmRlZiBORVRXQVJFJChETCkgPj4gJEAKKwlAZWNobyAkKERMKSNlcnJvciBUaGlzICQobm90ZGlyICRAKSBpcyBjcmVhdGVkIGZvciBOZXRXYXJlIHBsYXRmb3JtISQoREwpID4+ICRACisJQGVjaG8gJChETCkjZW5kaWYkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBWRVJTSU9OICIkKExJQkNVUkxfVkVSU0lPTl9TVFIpIiQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIFBBQ0tBR0VfQlVHUkVQT1JUICJhIHN1aXRhYmxlIGN1cmwgbWFpbGluZyBsaXN0ID0+IGh0dHA6Ly9jdXJsLmhheHguc2UvbWFpbC8iJChETCkgPj4gJEAKK2lmZXEgKCQoTElCQVJDSCksQ0xJQikKKwlAZWNobyAkKERMKSNkZWZpbmUgT1MgImk1ODYtcGMtY2xpYi1OZXRXYXJlIiQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIE5FVERCX1VTRV9JTlRFUk5FVCAxJChETCkgPj4gJEAKKwlAZWNobyAkKERMKSNkZWZpbmUgSEFWRV9TVFJJQ01QIDEkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBIQVZFX1NUUk5JQ01QIDEkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBSRUNWX1RZUEVfQVJHMSBpbnQkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBSRUNWX1RZUEVfQVJHMiBjaGFyICokKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBSRUNWX1RZUEVfQVJHMyBpbnQkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBSRUNWX1RZUEVfQVJHNCBpbnQkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBSRUNWX1RZUEVfUkVUViBpbnQkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBSRUNWRlJPTV9UWVBFX0FSRzEgaW50JChETCkgPj4gJEAKKwlAZWNobyAkKERMKSNkZWZpbmUgUkVDVkZST01fVFlQRV9BUkcyIGNoYXIkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBSRUNWRlJPTV9UWVBFX0FSRzMgaW50JChETCkgPj4gJEAKKwlAZWNobyAkKERMKSNkZWZpbmUgUkVDVkZST01fVFlQRV9BUkc0IGludCQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIFJFQ1ZGUk9NX1RZUEVfQVJHNSBzdHJ1Y3Qgc29ja2FkZHIkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBSRUNWRlJPTV9UWVBFX0FSRzYgaW50JChETCkgPj4gJEAKKwlAZWNobyAkKERMKSNkZWZpbmUgUkVDVkZST01fVFlQRV9SRVRWIGludCQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIFNFTkRfUVVBTF9BUkcyJChETCkgPj4gJEAKKwlAZWNobyAkKERMKSNkZWZpbmUgU0VORF9UWVBFX0FSRzEgaW50JChETCkgPj4gJEAKKwlAZWNobyAkKERMKSNkZWZpbmUgU0VORF9UWVBFX0FSRzIgY2hhciAqJChETCkgPj4gJEAKKwlAZWNobyAkKERMKSNkZWZpbmUgU0VORF9UWVBFX0FSRzMgaW50JChETCkgPj4gJEAKKwlAZWNobyAkKERMKSNkZWZpbmUgU0VORF9UWVBFX0FSRzQgaW50JChETCkgPj4gJEAKKwlAZWNobyAkKERMKSNkZWZpbmUgU0VORF9UWVBFX1JFVFYgaW50JChETCkgPj4gJEAKKwlAZWNobyAkKERMKSNkZWZpbmUgcHJlc3NhbnlrZXkgUHJlc3NBbnlLZXlUb0NvbnRpbnVlJChETCkgPj4gJEAKK2Vsc2UKKwlAZWNobyAkKERMKSNkZWZpbmUgT1MgImk1ODYtcGMtbGliYy1OZXRXYXJlIiQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIEhBVkVfRlRSVU5DQVRFIDEkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBIQVZFX0dFVFRJTUVPRkRBWSAxJChETCkgPj4gJEAKKwlAZWNobyAkKERMKSNkZWZpbmUgSEFWRV9JTlRUWVBFU19IIDEkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBIQVZFX0xPTkdMT05HIDEkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBIQVZFX1NURElOVF9IIDEkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBIQVZFX1NUUkNBU0VDTVAgMSQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIEhBVkVfU1RSTENBVCAxJChETCkgPj4gJEAKKwlAZWNobyAkKERMKSNkZWZpbmUgSEFWRV9TVFJMQ1BZIDEkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBIQVZFX1NUUlRPTEwgMSQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIEhBVkVfU1lTX1BBUkFNX0ggMSQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIEhBVkVfU1lTX1NFTEVDVF9IIDEkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBIQVZFX1RFUk1JT1NfSCAxJChETCkgPj4gJEAKKwlAZWNobyAkKERMKSNkZWZpbmUgUkVDVl9UWVBFX0FSRzEgaW50JChETCkgPj4gJEAKKwlAZWNobyAkKERMKSNkZWZpbmUgUkVDVl9UWVBFX0FSRzIgdm9pZCAqJChETCkgPj4gJEAKKwlAZWNobyAkKERMKSNkZWZpbmUgUkVDVl9UWVBFX0FSRzMgc2l6ZV90JChETCkgPj4gJEAKKwlAZWNobyAkKERMKSNkZWZpbmUgUkVDVl9UWVBFX0FSRzQgaW50JChETCkgPj4gJEAKKwlAZWNobyAkKERMKSNkZWZpbmUgUkVDVl9UWVBFX1JFVFYgc3NpemVfdCQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIFJFQ1ZGUk9NX1RZUEVfQVJHMSBpbnQkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBSRUNWRlJPTV9UWVBFX0FSRzIgdm9pZCQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIFJFQ1ZGUk9NX1RZUEVfQVJHMyBzaXplX3QkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBSRUNWRlJPTV9UWVBFX0FSRzQgaW50JChETCkgPj4gJEAKKwlAZWNobyAkKERMKSNkZWZpbmUgUkVDVkZST01fVFlQRV9BUkc1IHN0cnVjdCBzb2NrYWRkciQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIFJFQ1ZGUk9NX1RZUEVfQVJHNiBzaXplX3QkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBSRUNWRlJPTV9UWVBFX1JFVFYgc3NpemVfdCQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIFJFQ1ZGUk9NX1RZUEVfQVJHMl9JU19WT0lEIDEkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBTRU5EX1FVQUxfQVJHMiQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIFNFTkRfVFlQRV9BUkcxIGludCQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIFNFTkRfVFlQRV9BUkcyIHZvaWQgKiQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIFNFTkRfVFlQRV9BUkczIHNpemVfdCQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIFNFTkRfVFlQRV9BUkc0IGludCQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIFNFTkRfVFlQRV9SRVRWIHNzaXplX3QkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBTSVpFT0ZfT0ZGX1QgOCQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIF9MQVJHRUZJTEUgMSQoREwpID4+ICRACitpZmRlZiBFTkFCTEVfSVBWNgorCUBlY2hvICQoREwpI2RlZmluZSBFTkFCTEVfSVBWNiAxJChETCkgPj4gJEAKKwlAZWNobyAkKERMKSNkZWZpbmUgSEFWRV9BRl9JTkVUNiAxJChETCkgPj4gJEAKKwlAZWNobyAkKERMKSNkZWZpbmUgSEFWRV9QRl9JTkVUNiAxJChETCkgPj4gJEAKKwlAZWNobyAkKERMKSNkZWZpbmUgSEFWRV9GUkVFQUREUklORk8gMSQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIEhBVkVfR0VUQUREUklORk8gMSQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIEhBVkVfU09DS0FERFJfSU42X1NJTjZfU0NPUEVfSUQgMSQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIEhBVkVfU1RSVUNUX0FERFJJTkZPIDEkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBIQVZFX1NUUlVDVF9JTjZfQUREUiAxJChETCkgPj4gJEAKKwlAZWNobyAkKERMKSNkZWZpbmUgSEFWRV9TVFJVQ1RfU09DS0FERFJfSU42IDEkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBTSVpFT0ZfU1RSVUNUX0lONl9BRERSIDE2JChETCkgPj4gJEAKK2VuZGlmCitlbmRpZgorCUBlY2hvICQoREwpI2RlZmluZSBVU0VfTUFOVUFMIDEkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBIQVZFX0FSUEFfSU5FVF9IIDEkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBIQVZFX0FTU0VSVF9IIDEkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBIQVZFX0VSUl9IIDEkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBIQVZFX0ZDTlRMX0ggMSQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIEhBVkVfR0VUSE9TVEJZQUREUiAxJChETCkgPj4gJEAKKwlAZWNobyAkKERMKSNkZWZpbmUgSEFWRV9HRVRIT1NUQllOQU1FIDEkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBIQVZFX0dFVFBST1RPQllOQU1FIDEkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBIQVZFX0dNVElNRV9SIDEkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBIQVZFX0lORVRfQUREUiAxJChETCkgPj4gJEAKKwlAZWNobyAkKERMKSNkZWZpbmUgSEFWRV9JT0NUTCAxJChETCkgPj4gJEAKKwlAZWNobyAkKERMKSNkZWZpbmUgSEFWRV9JT0NUTF9GSU9OQklPIDEkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBIQVZFX0xJTUlUU19IIDEkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBIQVZFX0xMIDEkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBIQVZFX0xPQ0FMRV9IIDEkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBIQVZFX0xPQ0FMVElNRV9SIDEkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBIQVZFX01BTExPQ19IIDEkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBIQVZFX05FVElORVRfSU5fSCAxJChETCkgPj4gJEAKKwlAZWNobyAkKERMKSNkZWZpbmUgSEFWRV9SRUNWIDEkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBIQVZFX1JFQ1ZGUk9NIDEkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBIQVZFX1NFTEVDVCAxJChETCkgPj4gJEAKKwlAZWNobyAkKERMKSNkZWZpbmUgSEFWRV9TRU5EIDEkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBIQVZFX1NFVEpNUF9IIDEkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBIQVZFX1NFVExPQ0FMRSAxJChETCkgPj4gJEAKKwlAZWNobyAkKERMKSNkZWZpbmUgSEFWRV9TSUdOQUwgMSQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIEhBVkVfU0lHTkFMX0ggMSQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIEhBVkVfU0lHX0FUT01JQ19UIDEkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBIQVZFX1NPQ0tFVCAxJChETCkgPj4gJEAKKwlAZWNobyAkKERMKSNkZWZpbmUgSEFWRV9TVERMSUJfSCAxJChETCkgPj4gJEAKKwlAZWNobyAkKERMKSNkZWZpbmUgSEFWRV9TVFJEVVAgMSQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIEhBVkVfU1RSRlRJTUUgMSQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIEhBVkVfU1RSSU5HX0ggMSQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIEhBVkVfU1RSU1RSIDEkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBIQVZFX1NUUlVDVF9USU1FVkFMIDEkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBIQVZFX1NZU19JT0NUTF9IIDEkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBIQVZFX1NZU19TVEFUX0ggMSQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIEhBVkVfU1lTX1RJTUVfSCAxJChETCkgPj4gJEAKKwlAZWNobyAkKERMKSNkZWZpbmUgSEFWRV9USU1FX0ggMSQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIEhBVkVfVU5BTUUgMSQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIEhBVkVfVU5JU1REX0ggMSQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIEhBVkVfVVRJTUUgMSQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIEhBVkVfVVRJTUVfSCAxJChETCkgPj4gJEAKKwlAZWNobyAkKERMKSNkZWZpbmUgSEFWRV9XUklURVYgMSQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIFJFVFNJR1RZUEUgdm9pZCQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIFNJWkVPRl9JTlQgNCQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIFNJWkVPRl9TSE9SVCAyJChETCkgPj4gJEAKKwlAZWNobyAkKERMKSNkZWZpbmUgU0laRU9GX1NUUlVDVF9JTl9BRERSIDQkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBTVERDX0hFQURFUlMgMSQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIFRJTUVfV0lUSF9TWVNfVElNRSAxJChETCkgPj4gJEAKK2lmZGVmIERJU0FCTEVfTERBUAorCUBlY2hvICQoREwpI2RlZmluZSBDVVJMX0RJU0FCTEVfTERBUCAxJChETCkgPj4gJEAKK2Vsc2UKKwlAZWNobyAkKERMKSNkZWZpbmUgQ1VSTF9IQVNfTk9WRUxMX0xEQVBTREsgMSQoREwpID4+ICRACitpZm5kZWYgRElTQUJMRV9MREFQUworCUBlY2hvICQoREwpI2RlZmluZSBIQVZFX0xEQVBfU1NMIDEkKERMKSA+PiAkQAorZW5kaWYKKwlAZWNobyAkKERMKSNkZWZpbmUgSEFWRV9MREFQX1NTTF9IIDEkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBIQVZFX0xEQVBfVVJMX1BBUlNFIDEkKERMKSA+PiAkQAorZW5kaWYKK2lmZGVmIE5XX1dJTlNPQ0sKKwlAZWNobyAkKERMKSNkZWZpbmUgSEFWRV9DTE9TRVNPQ0tFVCAxJChETCkgPj4gJEAKK2Vsc2UKKwlAZWNobyAkKERMKSNkZWZpbmUgVVNFX0JTRF9TT0NLRVRTIDEkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBIQVZFX1NZU19UWVBFU19IIDEkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBIQVZFX1NZU19TT0NLRVRfSCAxJChETCkgPj4gJEAKKwlAZWNobyAkKERMKSNkZWZpbmUgSEFWRV9TWVNfU09DS0lPX0ggMSQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIEhBVkVfTkVUREJfSCAxJChETCkgPj4gJEAKK2VuZGlmCitpZmRlZiBXSVRIX0FSRVMKKwlAZWNobyAkKERMKSNkZWZpbmUgVVNFX0FSRVMgMSQoREwpID4+ICRACitlbmRpZgoraWZkZWYgV0lUSF9aTElCCisJQGVjaG8gJChETCkjZGVmaW5lIEhBVkVfWkxJQl9IIDEkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBIQVZFX0xJQlogMSQoREwpID4+ICRACitlbmRpZgoraWZkZWYgV0lUSF9TU0wKKwlAZWNobyAkKERMKSNkZWZpbmUgVVNFX1NTTEVBWSAxJChETCkgPj4gJEAKKwlAZWNobyAkKERMKSNkZWZpbmUgVVNFX09QRU5TU0wgMSQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIEhBVkVfT1BFTlNTTF9YNTA5X0ggMSQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIEhBVkVfT1BFTlNTTF9TU0xfSCAxJChETCkgPj4gJEAKKwlAZWNobyAkKERMKSNkZWZpbmUgSEFWRV9PUEVOU1NMX1JTQV9IIDEkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBIQVZFX09QRU5TU0xfUEVNX0ggMSQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIEhBVkVfT1BFTlNTTF9FUlJfSCAxJChETCkgPj4gJEAKKwlAZWNobyAkKERMKSNkZWZpbmUgSEFWRV9PUEVOU1NMX0NSWVBUT19IIDEkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBIQVZFX09QRU5TU0xfRU5HSU5FX0ggMSQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIEhBVkVfTElCU1NMIDEkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBIQVZFX0xJQkNSWVBUTyAxJChETCkgPj4gJEAKKwlAZWNobyAkKERMKSNkZWZpbmUgT1BFTlNTTF9OT19LUkI1IDEkKERMKSA+PiAkQAorZW5kaWYKK2lmZGVmIFdJVEhfU1NIMgorCUBlY2hvICQoREwpI2RlZmluZSBVU0VfTElCU1NIMiAxJChETCkgPj4gJEAKKwlAZWNobyAkKERMKSNkZWZpbmUgSEFWRV9MSUJTU0gyX0ggMSQoREwpID4+ICRACitlbmRpZgoraWZkZWYgV0lUSF9JRE4KKwlAZWNobyAkKERMKSNkZWZpbmUgSEFWRV9MSUJJRE4gMSQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIEhBVkVfVExEX0ggMSQoREwpID4+ICRACitlbmRpZgoraWZkZWYgV0lUSF9SVE1QCisJQGVjaG8gJChETCkjZGVmaW5lIFVTRV9MSUJSVE1QIDEkKERMKSA+PiAkQAorZW5kaWYKKwlAZWNobyAkKERMKSNpZmRlZiBfX0dOVUNfXyQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIEhBVkVfVkFSSUFESUNfTUFDUk9TX0dDQyAxJChETCkgPj4gJEAKKwlAZWNobyAkKERMKSNlbHNlJChETCkgPj4gJEAKKwlAZWNobyAkKERMKSNkZWZpbmUgSEFWRV9WQVJJQURJQ19NQUNST1NfQzk5IDEkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2VuZGlmJChETCkgPj4gJEAKK2lmZGVmIENBQlVORExFCisJQGVjaG8gJChETCkjZGVmaW5lIENVUkxfQ0FfQlVORExFICIkKENBQlVORExFKSIkKERMKSA+PiAkQAorZWxzZQorCUBlY2hvICQoREwpI2RlZmluZSBDVVJMX0NBX0JVTkRMRSBnZXRlbnYoIkNVUkxfQ0FfQlVORExFIikkKERMKSA+PiAkQAorZW5kaWYKKworRk9SQ0U6IDsKKworaW5mbzogJChPQkpESVIpL3ZlcnNpb24uaW5jCisJQGVjaG8gQ29uZmlndXJlZCB0byBidWlsZCAkKFRBUkdFVCkgd2l0aCB0aGVzZSBvcHRpb25zOgorCUBlY2hvIGxpYmFyY2hpdGVjdHVyZTogJChMSUJBUkNIKQorCUBlY2hvIGN1cmwgdmVyc2lvbjogICAgJChMSUJDVVJMX1ZFUlNJT05fU1RSKQorCUBlY2hvIGNvbXBpbGVyL2xpbmtlcjogJChDQykgLyAkKExEKQoraWZkZWYgQ0FCVU5ETEUKKwlAZWNobyBjYS1idW5kbGUgcGF0aDogICQoQ0FCVU5ETEUpCitlbmRpZgoraWZkZWYgV0lUSF9TU0wKKwlAZWNobyBTU0wgc3VwcG9ydDogICAgIGVuYWJsZWQgKE9wZW5TU0wpCitlbHNlCisJQGVjaG8gU1NMIHN1cHBvcnQ6ICAgICBubworZW5kaWYKK2lmZGVmIFdJVEhfU1NIMgorCUBlY2hvIFNTSDIgc3VwcG9ydDogICAgZW5hYmxlZCAobGlic3NoMikKK2Vsc2UKKwlAZWNobyBTU0gyIHN1cHBvcnQ6ICAgIG5vCitlbmRpZgoraWZkZWYgV0lUSF9aTElCCisJQGVjaG8gemxpYiBzdXBwb3J0OiAgICBlbmFibGVkCitlbHNlCisJQGVjaG8gemxpYiBzdXBwb3J0OiAgICBubworZW5kaWYKK2lmZGVmIFdJVEhfQVJFUworCUBlY2hvIGMtYXJlcyBzdXBwb3J0OiAgZW5hYmxlZAorZWxzZQorCUBlY2hvIGMtYXJlcyBzdXBwb3J0OiAgbm8KK2VuZGlmCitpZmRlZiBFTkFCTEVfSVBWNgorCUBlY2hvIGlwdjYgc3VwcG9ydDogICAgZW5hYmxlZAorZWxzZQorCUBlY2hvIGlwdjYgc3VwcG9ydDogICAgbm8KK2VuZGlmCisKKyQoTElCQ0FSRVNfUEFUSCkvbGliY2FyZXMuJChMSUJFWFQpOgorCSQoTUFLRSkgLUMgJChMSUJDQVJFU19QQVRIKSAtZiBNYWtlZmlsZS5uZXR3YXJlIGxpYgorCitjYS1idW5kbGUuY3J0OiBtay1jYS1idW5kbGUucGwKKwlAZWNobyBDcmVhdGluZyAkQAorCUAtJChQRVJMKSAkPCAtYiAtbiAkQAorCiskKENVUkxfSU5DKS9jdXJsL2N1cmxidWlsZC5oOiBNYWtlZmlsZS5uZXR3YXJlIEZPUkNFCisJQGVjaG8gQ3JlYXRpbmcgJEAKKwlAZWNobyAkKERMKS8qICRAIGludGVuZGVkIGZvciBOZXRXYXJlIHRhcmdldC4kKERMKSA+ICRACisJQGVjaG8gJChETCkqKiBEbyBub3QgZWRpdCB0aGlzIGZpbGUgLSBpdCBpcyBjcmVhdGVkIGJ5IG1ha2UhJChETCkgPj4gJEAKKwlAZWNobyAkKERMKSoqIEFsbCB5b3VyIGNoYW5nZXMgd2lsbCBiZSBsb3N0ISEkKERMKSA+PiAkQAorCUBlY2hvICQoREwpKi8kKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2lmbmRlZiBORVRXQVJFJChETCkgPj4gJEAKKwlAZWNobyAkKERMKSNlcnJvciBUaGlzICQobm90ZGlyICRAKSBpcyBjcmVhdGVkIGZvciBOZXRXYXJlIHBsYXRmb3JtISQoREwpID4+ICRACisJQGVjaG8gJChETCkjZW5kaWYkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2lmbmRlZiBfX0NVUkxfQ1VSTEJVSUxEX0gkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBfX0NVUkxfQ1VSTEJVSUxEX0gkKERMKSA+PiAkQAoraWZlcSAoJChMSUJBUkNIKSxMSUJDKQorCUBlY2hvICQoREwpI2RlZmluZSBDVVJMX1NJWkVPRl9MT05HIDQkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBDVVJMX1RZUEVPRl9DVVJMX1NPQ0tMRU5fVCB1bnNpZ25lZCBpbnQkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBDVVJMX1NJWkVPRl9DVVJMX1NPQ0tMRU5fVCA0JChETCkgPj4gJEAKKwlAZWNobyAkKERMKSNkZWZpbmUgQ1VSTF9UWVBFT0ZfQ1VSTF9PRkZfVCBsb25nIGxvbmckKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBDVVJMX0ZPUk1BVF9DVVJMX09GRl9UICJsbGQiJChETCkgPj4gJEAKKwlAZWNobyAkKERMKSNkZWZpbmUgQ1VSTF9GT1JNQVRfQ1VSTF9PRkZfVFUgImxsdSIkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBDVVJMX0ZPUk1BVF9PRkZfVCAiJChQQ1QpbGxkIiQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIENVUkxfU0laRU9GX0NVUkxfT0ZGX1QgOCQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIENVUkxfU1VGRklYX0NVUkxfT0ZGX1QgTEwkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBDVVJMX1NVRkZJWF9DVVJMX09GRl9UVSBVTEwkKERMKSA+PiAkQAorZWxzZQorCUBlY2hvICQoREwpI2RlZmluZSBDVVJMX1NJWkVPRl9MT05HIDQkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBDVVJMX1RZUEVPRl9DVVJMX1NPQ0tMRU5fVCBpbnQkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBDVVJMX1NJWkVPRl9DVVJMX1NPQ0tMRU5fVCA0JChETCkgPj4gJEAKKwlAZWNobyAkKERMKSNkZWZpbmUgQ1VSTF9UWVBFT0ZfQ1VSTF9PRkZfVCBsb25nJChETCkgPj4gJEAKKwlAZWNobyAkKERMKSNkZWZpbmUgQ1VSTF9GT1JNQVRfQ1VSTF9PRkZfVCAibGQiJChETCkgPj4gJEAKKwlAZWNobyAkKERMKSNkZWZpbmUgQ1VSTF9GT1JNQVRfQ1VSTF9PRkZfVFUgImx1IiQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIENVUkxfRk9STUFUX09GRl9UICIkKFBDVClsZCIkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBDVVJMX1NJWkVPRl9DVVJMX09GRl9UIDQkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBDVVJMX1NVRkZJWF9DVVJMX09GRl9UIEwkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBDVVJMX1NVRkZJWF9DVVJMX09GRl9UVSBVTCQoREwpID4+ICRACitlbmRpZgorCUBlY2hvICQoREwpdHlwZWRlZiBDVVJMX1RZUEVPRl9DVVJMX1NPQ0tMRU5fVCBjdXJsX3NvY2tsZW5fdDskKERMKSA+PiAkQAorCUBlY2hvICQoREwpdHlwZWRlZiBDVVJMX1RZUEVPRl9DVVJMX09GRl9UIGN1cmxfb2ZmX3Q7JChETCkgPj4gJEAKKwlAZWNobyAkKERMKSNlbmRpZiAvKiBfX0NVUkxfQ1VSTEJVSUxEX0ggKi8kKERMKSA+PiAkQAorCmRpZmYgLS1naXQgYS9saWIvTWFrZWZpbGUucmlzY29zIGIvbGliL01ha2VmaWxlLnJpc2NvcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YzkxOTg3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL01ha2VmaWxlLnJpc2NvcwpAQCAtMCwwICsxLDIzMiBAQAorIyBNYWtlZmlsZSBmb3IgcHJvamVjdCBsaWJjdXJsCisKKyMgUHJvamVjdCBvYmplY3RzOgorb2JqcyA9CW8uYmFzZTY0IG8uY29ubmVjdCBvLmNvb2tpZSBvLmRpY3QgXAorCW8uZGxsaW5pdCBvLmVhc3kgby5lc2NhcGUgby5maWxlIFwKKwlvLmZvcm1kYXRhIG8uZnRwIG8uZ2V0ZW52IG8uZ29waGVyIFwKKwlvLmdldGluZm8gby5nZXRwYXNzIG8uaG9zdGlwIFwKKwlvLmhvc3RpcDQgby5ob3N0c3luIG8uaHR0cCBcCisJby5odHRwX2NodW5rcyBvLmluZXRfbnRvcCBvLmluZXRfcHRvbiBvLmlmMmlwIG8ua3JiNCBvLmxkYXAgXAorCW8uY3VybF9mbm1hdGNoIG8uZmlsZWluZm8gby5mdHBsaXN0cGFyc2VyIG8ud2lsZGNhcmQgXAorCW8ubWVtZGVidWcgby5tcHJpbnRmIG8ubmV0cmMgby5wYXJzZWRhdGUgby5wcm9ncmVzcyBcCisJby5zZWN1cml0eSBvLnNlbGVjdCBvLnNlbmRmIG8uc3BlZWRjaGVjayBvLnNzbHVzZSBcCisJby5zdHJlcXVhbCBvLnN0cnRvayBvLnRlbG5ldCBvLnRpbWV2YWwgXAorCW8udHJhbnNmZXIgby51cmwgby52ZXJzaW9uIG8uc3RydG9vZmZ0IG8uc3NsZ2VuIG8uZ3RscyBcCisJby5yYXdzdHIgby5jdXJsX2FkZHJpbmZvIG8uc2xpc3Qgby5ub25ibG9jayBvLmN1cmxfcmFuZCBcCisJby5jdXJsX21lbXJjaHIgby5pbWFwIG8ucG9wMyBvLnNtdHAgby5waW5ncG9uZyBvLnJ0c3AgXAorCW8uY3VybF90aHJlYWRzIG8ud2Fybmxlc3Mgby5obWFjIG8ubWQ1IG8uY3VybF9ydG1wIFwKKwlvLm9wZW5sZGFwIG8ucG9sYXJzc2wgby5tZDQgby5jdXJsX2dldGhvc3RuYW1lCisKKworIyBDb21waWxlIG9wdGlvbnM6CitsaW5rb3B0cwk9IC1vIGxpYmN1cmwKK2NvbXBpbGVyb3B0cwk9IC1tcG9rZS1mdW5jdGlvbi1uYW1lIC1JVXRpbExpYjogLW10aHJvd2JhY2sKKworIyBQcm9qZWN0IHRhcmdldDoKK2xpYmN1cmw6CQkkKG9ianMpCisJCW1ha2VhbGYgJChsaW5rb3B0cykgJChvYmpzKQorCisjIFN0YXRpYyBkZXBlbmRhbmNpZXM6CitvLmJhc2U2NDoJYy5iYXNlNjQKKwkJZ2NjICQoY29tcGlsZXJvcHRzKSAtYyAtbyBiYXNlNjQubyBjLmJhc2U2NAorCitvLmNvbm5lY3Q6CWMuY29ubmVjdAorCQlnY2MgJChjb21waWxlcm9wdHMpIC1jIC1vIGNvbm5lY3QubyBjLmNvbm5lY3QKKworby5jb29raWU6CWMuY29va2llCisJCWdjYyAkKGNvbXBpbGVyb3B0cykgLWMgLW8gY29va2llLm8gYy5jb29raWUKKworby5jdXJsX2FkZHJpbmZvOgljLmN1cmxfYWRkcmluZm8KKwkJZ2NjICQoY29tcGlsZXJvcHRzKSAtYyAtbyBjdXJsX2FkZHJpbmZvLm8gYy5jdXJsX2FkZHJpbmZvCisKK28uY3VybF9nZXRob3N0bmFtZToJYy5jdXJsX2dldGhvc3RuYW1lCisJCWdjYyAkKGNvbXBpbGVyb3B0cykgLWMgLW8gY3VybF9nZXRob3N0bmFtZS5vIGMuY3VybF9nZXRob3N0bmFtZQorCitvLmN1cmxfbWVtcmNocjoJYy5jdXJsX21lbXJjaHIKKwkJZ2NjICQoY29tcGlsZXJvcHRzKSAtYyAtbyBjdXJsX21lbXJjaHIubyBjLmN1cmxfbWVtcmNocgorCitvLmN1cmxfcmFuZDoJYy5jdXJsX3JhbmQKKwkJZ2NjICQoY29tcGlsZXJvcHRzKSAtYyAtbyBjdXJsX3JhbmQubyBjLmN1cmxfcmFuZAorCitvLmN1cmxfcnRtcDoJYy5jdXJsX3J0bXAKKwkJZ2NjICQoY29tcGlsZXJvcHRzKSAtYyAtbyBjdXJsX3J0bXAubyBjLmN1cmxfcnRtcAorCitvLmN1cmxfdGhyZWFkczoJYy5jdXJsX3RocmVhZHMKKwkJZ2NjICQoY29tcGlsZXJvcHRzKSAtYyAtbyBjdXJsX3RocmVhZHMubyBjLmN1cmxfdGhyZWFkcworCitvLmRpY3Q6CWMuZGljdAorCQlnY2MgJChjb21waWxlcm9wdHMpIC1jIC1vIGRpY3QubyBjLmRpY3QKKworby5kbGxpbml0OgljLmRsbGluaXQKKwkJZ2NjICQoY29tcGlsZXJvcHRzKSAtYyAtbyBkbGxpbml0Lm8gYy5kbGxpbml0CisKK28uZWFzeToJYy5lYXN5CisJCWdjYyAkKGNvbXBpbGVyb3B0cykgLWMgLW8gZWFzeS5vIGMuZWFzeQorCitvLmVzY2FwZToJYy5lc2NhcGUKKwkJZ2NjICQoY29tcGlsZXJvcHRzKSAtYyAtbyBlc2NhcGUubyBjLmVzY2FwZQorCitvLmZpbGU6CWMuZmlsZQorCQlnY2MgJChjb21waWxlcm9wdHMpIC1jIC1vIGZpbGUubyBjLmZpbGUKKworby5mb3JtZGF0YToJYy5mb3JtZGF0YQorCQlnY2MgJChjb21waWxlcm9wdHMpIC1jIC1vIGZvcm1kYXRhLm8gYy5mb3JtZGF0YQorCitvLmZ0cDoJYy5mdHAKKwkJZ2NjICQoY29tcGlsZXJvcHRzKSAtYyAtbyBmdHAubyBjLmZ0cAorCitvLmdldGVudjoJYy5nZXRlbnYKKwkJZ2NjICQoY29tcGlsZXJvcHRzKSAtYyAtbyBnZXRlbnYubyBjLmdldGVudgorCitvLmdldGluZm86CWMuZ2V0aW5mbworCQlnY2MgJChjb21waWxlcm9wdHMpIC1jIC1vIGdldGluZm8ubyBjLmdldGluZm8KKworby5nZXRwYXNzOgljLmdldHBhc3MKKwkJZ2NjICQoY29tcGlsZXJvcHRzKSAtYyAtbyBnZXRwYXNzLm8gYy5nZXRwYXNzCisKK28uZ29waGVyOgljLmdvcGhlcgorCQlnY2MgJChjb21waWxlcm9wdHMpIC1jIC1vIGdvcGhlci5vIGMuZ29waGVyCisKK28uaG1hYzoJCWMuaG1hYworCQlnY2MgJChjb21waWxlcm9wdHMpIC1jIC1vIGhtYWMubyBjLmhtYWMKKworby5ob3N0aXA6CWMuaG9zdGlwCisJCWdjYyAkKGNvbXBpbGVyb3B0cykgLWMgLW8gaG9zdGlwLm8gYy5ob3N0aXAKKworby5ob3N0aXA0OgljLmhvc3RpcDQKKwkJZ2NjICQoY29tcGlsZXJvcHRzKSAtYyAtbyBob3N0aXA0Lm8gYy5ob3N0aXA0CisKK28uaG9zdHN5bjoJYy5ob3N0c3luCisJCWdjYyAkKGNvbXBpbGVyb3B0cykgLWMgLW8gaG9zdHN5bi5vIGMuaG9zdHN5bgorCitvLmh0dHA6CWMuaHR0cAorCQlnY2MgJChjb21waWxlcm9wdHMpIC1jIC1vIGh0dHAubyBjLmh0dHAKKworby5odHRwX2NodW5rczoJYy5odHRwX2NodW5rcworCQlnY2MgJChjb21waWxlcm9wdHMpIC1jIC1vIGh0dHBfY2h1bmtzLm8gYy5odHRwX2NodW5rcworCitvLmlmMmlwOgljLmlmMmlwCisJCWdjYyAkKGNvbXBpbGVyb3B0cykgLWMgLW8gaWYyaXAubyBjLmlmMmlwCisKK28uaW1hcDoJCWMuaW1hcAorCQlnY2MgJChjb21waWxlcm9wdHMpIC1jIC1vIGltYXAubyBjLmltYXAKKworby5pbmV0X250b3A6CWMuaW5ldF9udG9wCisJCWdjYyAkKGNvbXBpbGVyb3B0cykgLWMgLW8gaW5ldF9udG9wLm8gYy5pbmV0X250b3AKKworby5pbmV0X3B0b246CWMuaW5ldF9wdG9uCisJCWdjYyAkKGNvbXBpbGVyb3B0cykgLWMgLW8gaW5ldF9wdG9uLm8gYy5pbmV0X3B0b24KKworby5rcmI0OgljLmtyYjQKKwkJZ2NjICQoY29tcGlsZXJvcHRzKSAtYyAtbyBrcmI0Lm8gYy5rcmI0CisKK28ubGRhcDoJYy5sZGFwCisJCWdjYyAkKGNvbXBpbGVyb3B0cykgLUlPcGVuTERBUDogLWMgLW8gbGRhcC5vIGMubGRhcAorCitvLm1kNDoJCWMubWQ0CisJCWdjYyAkKGNvbXBpbGVyb3B0cykgLWMgLW8gbWQ0Lm8gYy5tZDQKKworby5tZDU6CQljLm1kNQorCQlnY2MgJChjb21waWxlcm9wdHMpIC1jIC1vIG1kNS5vIGMubWQ1CisKK28ubWVtZGVidWc6CWMubWVtZGVidWcKKwkJZ2NjICQoY29tcGlsZXJvcHRzKSAtYyAtbyBtZW1kZWJ1Zy5vIGMubWVtZGVidWcKKworby5tcHJpbnRmOgljLm1wcmludGYKKwkJZ2NjICQoY29tcGlsZXJvcHRzKSAtYyAtbyBtcHJpbnRmLm8gYy5tcHJpbnRmCisKK28ubmV0cmM6CWMubmV0cmMKKwkJZ2NjICQoY29tcGlsZXJvcHRzKSAtYyAtbyBuZXRyYy5vIGMubmV0cmMKKworby5vcGVubGRhcDoJYy5vcGVubGRhcAorCQlnY2MgJChjb21waWxlcm9wdHMpIC1jIC1vIG9wZW5sZGFwLm8gYy5vcGVubGRhcAorCitvLnBhcnNlZGF0ZToJYy5wYXJzZWRhdGUKKwkJZ2NjICQoY29tcGlsZXJvcHRzKSAtYyAtbyBwYXJzZWRhdGUubyBjLnBhcnNlZGF0ZQorCitvLnBpbmdwb25nOgljLnBpbmdwb25nCisJCWdjYyAkKGNvbXBpbGVyb3B0cykgLWMgLW8gcGluZ3BvbmcubyBjLnBpbmdwb25nCisKK28ucG9sYXJzc2w6CWMucG9sYXJzc2wKKwkJZ2NjICQoY29tcGlsZXJvcHRzKSAtYyAtbyBwb2xhcnNzbC5vIGMucG9sYXJzc2wKKworby5wb3AzOgkJYy5wb3AzCisJCWdjYyAkKGNvbXBpbGVyb3B0cykgLWMgLW8gcG9wMy5vIGMucG9wMworCitvLnByb2dyZXNzOgljLnByb2dyZXNzCisJCWdjYyAkKGNvbXBpbGVyb3B0cykgLWMgLW8gcHJvZ3Jlc3MubyBjLnByb2dyZXNzCisKK28ucnRzcDoJCWMucnRzcAorCQlnY2MgJChjb21waWxlcm9wdHMpIC1jIC1vIHJ0c3AubyBjLnJ0c3AKKworby5zZWN1cml0eToJYy5zZWN1cml0eQorCQlnY2MgJChjb21waWxlcm9wdHMpIC1jIC1vIHNlY3VyaXR5Lm8gYy5zZWN1cml0eQorCitvLnNlbGVjdDoJYy5zZWxlY3QKKwkJZ2NjICQoY29tcGlsZXJvcHRzKSAtYyAtbyBzZWxlY3QubyBjLnNlbGVjdAorCitvLnNlbmRmOgljLnNlbmRmCisJCWdjYyAkKGNvbXBpbGVyb3B0cykgLWMgLW8gc2VuZGYubyBjLnNlbmRmCisKK28uc2xpc3Q6CWMuc2xpc3QKKwkJZ2NjICQoY29tcGlsZXJvcHRzKSAtYyAtbyBzbGlzdC5vIGMuc2xpc3QKKworby5zbXRwOgkJYy5zbXRwCisJCWdjYyAkKGNvbXBpbGVyb3B0cykgLWMgLW8gc210cC5vIGMuc210cAorCitvLnNwZWVkY2hlY2s6CWMuc3BlZWRjaGVjaworCQlnY2MgJChjb21waWxlcm9wdHMpIC1jIC1vIHNwZWVkY2hlY2subyBjLnNwZWVkY2hlY2sKKworby5ndGxzOgkJYy5ndGxzCisJCWdjYyAkKGNvbXBpbGVyb3B0cykgLWMgLW8gZ3Rscy5vIGMuZ3RscworCitvLnNzbGdlbjoJYy5zc2xnZW4KKwkJZ2NjICQoY29tcGlsZXJvcHRzKSAtYyAtbyBzc2xnZW4ubyBjLnNzbGdlbgorCitvLnNzbHVzZToJYy5zc2x1c2UKKwkJZ2NjICQoY29tcGlsZXJvcHRzKSAtYyAtbyBzc2x1c2UubyBjLnNzbHVzZQorCitvLm5vbmJsb2NrOgljLm5vbmJsb2NrCisJCWdjYyAkKGNvbXBpbGVyb3B0cykgLWMgLW8gbm9uYmxvY2subyBjLm5vbmJsb2NrCisKK28ucmF3c3RyOgljLnJhd3N0cgorCQlnY2MgJChjb21waWxlcm9wdHMpIC1jIC1vIHJhd3N0ci5vIGMucmF3c3RyCisKK28uc3RyZXF1YWw6CWMuc3RyZXF1YWwKKwkJZ2NjICQoY29tcGlsZXJvcHRzKSAtYyAtbyBzdHJlcXVhbC5vIGMuc3RyZXF1YWwKKworby5zdHJ0b2s6CWMuc3RydG9rCisJCWdjYyAkKGNvbXBpbGVyb3B0cykgLWMgLW8gc3RydG9rLm8gYy5zdHJ0b2sKKworby5zdHJ0b29mZnQ6CWMuc3RydG9vZmZ0CisJCWdjYyAkKGNvbXBpbGVyb3B0cykgLWMgLW8gc3RydG9vZmZ0Lm8gYy5zdHJ0b29mZnQKKworby50ZWxuZXQ6CWMudGVsbmV0CisJCWdjYyAkKGNvbXBpbGVyb3B0cykgLWMgLW8gdGVsbmV0Lm8gYy50ZWxuZXQKKworby50aW1ldmFsOgljLnRpbWV2YWwKKwkJZ2NjICQoY29tcGlsZXJvcHRzKSAtYyAtbyB0aW1ldmFsLm8gYy50aW1ldmFsCisKK28udHJhbnNmZXI6CWMudHJhbnNmZXIKKwkJZ2NjICQoY29tcGlsZXJvcHRzKSAtYyAtbyB0cmFuc2Zlci5vIGMudHJhbnNmZXIKKworby51cmw6CQljLnVybAorCQlnY2MgJChjb21waWxlcm9wdHMpIC1jIC1vIHVybC5vIGMudXJsCisKK28udmVyc2lvbjoJYy52ZXJzaW9uCisJCWdjYyAkKGNvbXBpbGVyb3B0cykgLWMgLW8gdmVyc2lvbi5vIGMudmVyc2lvbgorCitvLndhcm5sZXNzOgljLndhcm5sZXNzCisJCWdjYyAkKGNvbXBpbGVyb3B0cykgLWMgLW8gd2Fybmxlc3MubyBjLndhcm5sZXNzCisKK28uY3VybF9mbm1hdGNoOgljLmN1cmxfZm5tYXRjaAorCQlnY2MgJChjb21waWxlcm9wdHMpIC1jIC1vIGN1cmxfZm5tYXRjaC5vIGMuY3VybF9mbm1hdGNoCisKK28uZmlsZWluZm86CWMuZmlsZWluZm8KKwkJZ2NjICQoY29tcGlsZXJvcHRzKSAtYyAtbyBmaWxlaW5mby5vIGMuZmlsZWluZm8KKworby5mdHBsaXN0cGFyc2VyOgljLmZ0cGxpc3RwYXJzZXIKKwkJZ2NjICQoY29tcGlsZXJvcHRzKSAtYyAtbyBmdHBsaXN0cGFyc2VyLm8gYy5mdHBsaXN0cGFyc2VyCisKK28ud2lsZGNhcmQ6CWMud2lsZGNhcmQKKwkJZ2NjICQoY29tcGlsZXJvcHRzKSAtYyAtbyB3aWxkY2FyZC5vIGMud2lsZGNhcmQKZGlmZiAtLWdpdCBhL2xpYi9NYWtlZmlsZS52YzEwIGIvbGliL01ha2VmaWxlLnZjMTAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTYwMDUyNwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9NYWtlZmlsZS52YzEwCkBAIC0wLDAgKzEsNTcxIEBACisjKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfDQorIyAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfA0KKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwNCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fDQorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wNCisjDQorIyBDb3B5cmlnaHQgKEMpIDE5OTkgLSAyMDEwLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLg0KKyMNCisjIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoDQorIyB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zDQorIyBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLg0KKyMNCisjIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbA0KKyMgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzDQorIyBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLg0KKyMNCisjIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkNCisjIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuDQorIw0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KKyMNCisjIE1ha2VmaWxlIGZvciBidWlsZGluZyBsaWJjdXJsIHdpdGggTVNWQzEwDQorIw0KKyMgVXNhZ2U6IHNlZSB1c2FnZSBtZXNzYWdlIGJlbG93DQorIyAgICAgICAgU2hvdWxkIGJlIGludm9rZWQgZnJvbSBcbGliIGRpcmVjdG9yeQ0KKyMgICAgICAgIEVkaXQgdGhlIHBhdGhzIGFuZCBkZXNpcmVkIGxpYnJhcnkgbmFtZQ0KKyMgICAgICAgIFNTTCBwYXRoIGlzIG9ubHkgcmVxdWlyZWQgaWYgeW91IGludGVuZCBjb21waWxpbmcNCisjICAgICAgICB3aXRoIFNTTC4NCisjDQorIyBUaGlzIG1ha2UgZmlsZSBsZWF2ZXMgdGhlIHJlc3VsdCBlaXRoZXIgYSAubGliIG9yIC5kbGwgZmlsZQ0KKyMgaW4gdGhlIFxsaWIgZGlyZWN0b3J5LiBJdCBzaG91bGQgYmUgY2FsbGVkIGZyb20gdGhlIFxsaWINCisjIGRpcmVjdG9yeS4NCisjDQorIyBBbiBvcHRpb24gd291bGQgaGF2ZSBiZWVuIHRvIGFsbG93IHRoZSBzb3VyY2UgZGlyZWN0b3J5IHRvDQorIyBiZSBzcGVjaWZpZWQsIGJ1dCBJIHNhdyBubyByZXF1aXJlbWVudC4NCisjDQorIyBBbm90aGVyIG9wdGlvbiB3b3VsZCBoYXZlIGJlZW4gdG8gbGVhdmUgdGhlIC5saWIgYW5kIC5kbGwNCisjIGZpbGVzIGluIHRoZSAiY2ZnIiBkaXJlY3RvcnksIGJ1dCB0aGVuIHRoZSBtYWtlIGZpbGUNCisjIGluIFxzcmMgd291bGQgbmVlZCB0byBiZSBjaGFuZ2VkLg0KKyMNCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KKw0KKyMNCisjIFN0ZW0gZm9yIHN0YXRpYyBsaWJzIGFuZCBETExzDQorIw0KK0xJQl9OQU1FICAgICAgID0gbGliY3VybA0KK0xJQl9OQU1FX0RFQlVHID0gbGliY3VybGQNCisNCisjDQorIyBTdGVtIGZvciBETEwgaW1wb3J0IGxpYnMNCisjDQorSU1QTElCX05BTUUgICAgICAgPSBsaWJjdXJsX2ltcA0KK0lNUExJQl9OQU1FX0RFQlVHID0gbGliY3VybGRfaW1wDQorDQorIUlGTkRFRiBPUEVOU1NMX1BBVEgNCitPUEVOU1NMX1BBVEggICA9IC4uLy4uL29wZW5zc2wtMC45LjhvDQorIUVORElGDQorDQorIUlGTkRFRiBaTElCX1BBVEgNCitaTElCX1BBVEggID0gLi4vLi4vemxpYi0xLjIuNQ0KKyFFTkRJRg0KKw0KKyFJRk5ERUYgTUFDSElORQ0KK01BQ0hJTkUgID0gWDg2DQorIUVORElGDQorDQorIyBVU0VfV0lORE9XU19TU1BJIHVzZXMgd2luZG93cyBsaWJyYXJpZXMgdG8gYWxsb3cgTlRMTSBhdXRoZW50aWNhdGlvbg0KKyMgd2l0aG91dCBhbiBvcGVuc3NsIGluc3RhbGxhdGlvbiBhbmQgb2ZmZXJzIHRoZSBhYmlsaXR5IHRvIGF1dGhlbnRpY2F0ZQ0KKyMgdXNpbmcgdGhlICJjdXJyZW50IGxvZ2dlZCBpbiB1c2VyIi4gU2luY2UgYXQgbGVhc3Qgd2l0aCBNU1ZDMTAgdGhlIHNzcGkuaA0KKyMgaGVhZGVyIGlzIGJyb2tlbiBpdCBpcyBlaXRoZXIgcmVxdWlyZWQgdG8gaW5zdGFsbCB0aGUgV2luZG93cyBTREssDQorIyBvciB0byBmaXggc3NwaS5oIHdpdGggYWRkaW5nIHRoaXMgZGVmaW5lIGF0IHRoZSBiZWdpbm5pbmcgb2Ygc3NwaS5oOg0KKyMgI2RlZmluZSBGcmVlQ3JlZGVudGlhbEhhbmRsZSBGcmVlQ3JlZGVudGlhbHNIYW5kbGUNCisjDQorIyBJZiwgZm9yIHNvbWUgcmVhc29uIHRoZSBXaW5kb3dzIFNESyBpcyBpbnN0YWxsZWQgYnV0IG5vdCBpbnN0YWxsZWQNCisjIGluIHRoZSBkZWZhdWx0IGxvY2F0aW9uLCB5b3UgY2FuIHNwZWNpZnkgV0lORE9XU19TREtfUEFUSC4NCisjIEl0IGNhbiBiZSBkb3dubG9hZGVkIGZyb206DQorIyBodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vbXNkb3dubG9hZC9wbGF0Zm9ybXNkay9zZGt1cGRhdGUvDQorDQorIyBXSU5ET1dTX1NTUEkgPSAxDQorDQorIUlGREVGIFdJTkRPV1NfU1NQSQ0KKyFJRk5ERUYgV0lORE9XU19TREtfUEFUSA0KK1dJTkRPV1NfU0RLX1BBVEggPSAiQzpcUHJvZ3JhbSBGaWxlc1xNaWNyb3NvZnQgU0RLIg0KKyFFTkRJRg0KKyFFTkRJRg0KKw0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCisjIyBOb3RoaW5nIG1vcmUgdG8gZG8gYmVsb3cgdGhpcyBsaW5lIQ0KKw0KK0NDTk9EQkcgICAgPSBjbC5leGUgL08yIC9ETkRFQlVHDQorQ0NERUJVRyAgICA9IGNsLmV4ZSAvT2QgL0dtIC9aaSAvRF9ERUJVRyAvUlRDMQ0KK0NGTEFHU1NTTCAgPSAvRFVTRV9TU0xFQVkgL0kgIiQoT1BFTlNTTF9QQVRIKS9pbmMzMiIgL0kgIiQoT1BFTlNTTF9QQVRIKS9pbmMzMi9vcGVuc3NsIg0KK0NGTEFHU1pMSUIgPSAvREhBVkVfWkxJQl9IIC9ESEFWRV9aTElCIC9ESEFWRV9MSUJaIC9JICIkKFpMSUJfUEFUSCkiDQorQ0ZMQUdTICAgICA9IC9JLiAvSS4uL2luY2x1ZGUgL25vbG9nbyAvVzMgL0VIc2MgL0RXSU4zMiAvRkQgL2MgL0RCVUlMRElOR19MSUJDVVJMDQorQ0ZMQUdTTElCICA9IC9EQ1VSTF9TVEFUSUNMSUINCitMTktETEwgICAgID0gbGluay5leGUgL0RMTA0KK0xOS0xJQiAgICAgPSBsaW5rLmV4ZSAvbGliDQorTEZMQUdTICAgICA9IC9ub2xvZ28gL21hY2hpbmU6JChNQUNISU5FKQ0KK1NTTExJQlMgICAgPSBsaWJlYXkzMi5saWIgc3NsZWF5MzIubGliDQorWkxJQkxJQlNETEw9IHpkbGwubGliDQorWkxJQkxJQlMgICA9IHpsaWIubGliDQorV0lOTElCUyAgICA9IHdzMl8zMi5saWIgd2xkYXAzMi5saWINCitDRkxBR1MgICAgID0gJChDRkxBR1MpDQorDQorQ0ZHU0VUICAgICA9IEZBTFNFDQorDQorIUlGREVGIFdJTkRPV1NfU1NQSQ0KK0NGTEFHUyA9ICQoQ0ZMQUdTKSAvRFVTRV9XSU5ET1dTX1NTUEkgL0kkKFdJTkRPV1NfU0RLX1BBVEgpXGluY2x1ZGUNCishRU5ESUYNCisNCishSUZERUYgVVNFX0lQVjYNCitDRkxBR1MgPSAkKENGTEFHUykgL0RVU0VfSVBWNg0KKyFFTkRJRg0KKw0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQorIyBSdW50aW1lIGxpYnJhcnkgY29uZmlndXJhdGlvbg0KKw0KK1JUTElCICAgPSAvTUQNCitSVExJQkQgID0gL01EZA0KKw0KKyFJRiAiJChSVExJQkNGRykiID09ICJzdGF0aWMiDQorUlRMSUIgID0gL01UDQorUlRMSUJEID0gL01UZA0KKyFFTkRJRg0KKw0KKw0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCisjIHJlbGVhc2UNCisNCishSUYgIiQoQ0ZHKSIgPT0gInJlbGVhc2UiDQorVEFSR0VUID0gJChMSUJfTkFNRSkubGliDQorRElST0JKID0gJChDRkcpDQorTE5LICAgID0gJChMTktMSUIpIC9vdXQ6JChESVJPQkopXCQoVEFSR0VUKQ0KK0NDICAgICA9ICQoQ0NOT0RCRykgJChSVExJQikgJChDRkxBR1NMSUIpDQorQ0ZHU0VUID0gVFJVRQ0KKyFFTkRJRg0KKw0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCisjIHJlbGVhc2UtemxpYg0KKw0KKyFJRiAiJChDRkcpIiA9PSAicmVsZWFzZS16bGliIg0KK1RBUkdFVCAgID0gJChMSUJfTkFNRSkubGliDQorRElST0JKICAgPSAkKENGRykNCitMRkxBR1NaTElCID0gIi9MSUJQQVRIOiQoWkxJQl9QQVRIKSINCitMTksgICAgICA9ICQoTE5LTElCKSAkKFpMSUJMSUJTKSAkKExGTEFHU1pMSUIpIC9vdXQ6JChESVJPQkopXCQoVEFSR0VUKQ0KK0NDICAgICAgID0gJChDQ05PREJHKSAkKFJUTElCKSAkKENGTEFHU1pMSUIpICQoQ0ZMQUdTTElCKQ0KK0NGR1NFVCAgID0gVFJVRQ0KKyFFTkRJRg0KKw0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCisjIHJlbGVhc2UtZGxsDQorDQorIUlGICIkKENGRykiID09ICJyZWxlYXNlLWRsbCINCitUQVJHRVQgPSAkKExJQl9OQU1FKS5kbGwNCitESVJPQkogPSAkKENGRykNCitMTksgICAgPSAkKExOS0RMTCkgJChXSU5MSUJTKSAvb3V0OiQoRElST0JKKVwkKFRBUkdFVCkgL0lNUExJQjokKERJUk9CSilcJChJTVBMSUJfTkFNRSkubGliDQorQ0MgICAgID0gJChDQ05PREJHKSAkKFJUTElCKQ0KK0NGR1NFVCA9IFRSVUUNCitSRVNPVVJDRSA9ICQoRElST0JKKVxsaWJjdXJsLnJlcw0KKyFFTkRJRg0KKw0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCisjIHJlbGVhc2Utc3NsDQorDQorIUlGICIkKENGRykiID09ICJyZWxlYXNlLXNzbCINCitUQVJHRVQgICA9ICQoTElCX05BTUUpLmxpYg0KK0RJUk9CSiAgID0gJChDRkcpDQorTEZMQUdTU1NMID0gIi9MSUJQQVRIOiQoT1BFTlNTTF9QQVRIKVxvdXQzMiINCitMTksgICAgICA9ICQoTE5LTElCKSAkKExGTEFHU1NTTCkgL291dDokKERJUk9CSilcJChUQVJHRVQpDQorQ0MgICAgICAgPSAkKENDTk9EQkcpICQoUlRMSUIpICQoQ0ZMQUdTU1NMKSAkKENGTEFHU0xJQikNCitDRkdTRVQgICA9IFRSVUUNCishRU5ESUYNCisNCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQorIyByZWxlYXNlLXNzbC1kbGwNCisNCishSUYgIiQoQ0ZHKSIgPT0gInJlbGVhc2Utc3NsLWRsbCINCitUQVJHRVQgICA9ICQoTElCX05BTUUpLmxpYg0KK0RJUk9CSiAgID0gJChDRkcpDQorTEZMQUdTU1NMID0gIi9MSUJQQVRIOiQoT1BFTlNTTF9QQVRIKVxvdXQzMmRsbCINCitMTksgICAgICA9ICQoTE5LTElCKSAkKFdJTkxJQlMpICQoU1NMTElCUykgJChMRkxBR1NTU0wpIC9vdXQ6JChESVJPQkopXCQoVEFSR0VUKQ0KK0NDICAgICAgID0gJChDQ05PREJHKSAkKFJUTElCKSAkKENGTEFHU1NTTCkgJChDRkxBR1NMSUIpDQorQ0ZHU0VUICAgPSBUUlVFDQorIUVORElGDQorDQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KKyMgcmVsZWFzZS1zc2wtemxpYg0KKw0KKyFJRiAiJChDRkcpIiA9PSAicmVsZWFzZS1zc2wtemxpYiINCitUQVJHRVQgICA9ICQoTElCX05BTUUpLmxpYg0KK0RJUk9CSiAgID0gJChDRkcpDQorTEZMQUdTU1NMID0gIi9MSUJQQVRIOiQoT1BFTlNTTF9QQVRIKVxvdXQzMiINCitMRkxBR1NaTElCID0gIi9MSUJQQVRIOiQoWkxJQl9QQVRIKSINCitMTksgICAgICA9ICQoTE5LTElCKSAkKExGTEFHU1NTTCkgJChMRkxBR1NaTElCKSAvb3V0OiQoRElST0JKKVwkKFRBUkdFVCkNCitDQyAgICAgICA9ICQoQ0NOT0RCRykgJChSVExJQikgJChDRkxBR1NTU0wpICQoQ0ZMQUdTWkxJQikgJChDRkxBR1NMSUIpDQorQ0ZHU0VUICAgPSBUUlVFDQorIUVORElGDQorDQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KKyMgcmVsZWFzZS1kbGwtc3NsLWRsbA0KKw0KKyFJRiAiJChDRkcpIiA9PSAicmVsZWFzZS1kbGwtc3NsLWRsbCINCitUQVJHRVQgICA9ICQoTElCX05BTUUpLmRsbA0KK0RJUk9CSiAgID0gJChDRkcpDQorTEZMQUdTU1NMID0gIi9MSUJQQVRIOiQoT1BFTlNTTF9QQVRIKVxvdXQzMmRsbCINCitMTksgICAgICA9ICQoTE5LRExMKSAkKFdJTkxJQlMpICQoU1NMTElCUykgJChMRkxBR1NTU0wpIC9vdXQ6JChESVJPQkopXCQoVEFSR0VUKSAvSU1QTElCOiQoRElST0JKKVwkKElNUExJQl9OQU1FKS5saWINCitDQyAgICAgICA9ICQoQ0NOT0RCRykgJChSVExJQikgJChDRkxBR1NTU0wpDQorQ0ZHU0VUICAgPSBUUlVFDQorUkVTT1VSQ0UgPSAkKERJUk9CSilcbGliY3VybC5yZXMNCishRU5ESUYNCisNCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQorIyByZWxlYXNlLXpsaWItZGxsDQorDQorIUlGICIkKENGRykiID09ICJyZWxlYXNlLXpsaWItZGxsIg0KK1RBUkdFVCAgID0gJChMSUJfTkFNRSkubGliDQorRElST0JKICAgPSAkKENGRykNCitMRkxBR1NaTElCID0gIi9MSUJQQVRIOiQoWkxJQl9QQVRIKSINCitMTksgICAgICA9ICQoTE5LTElCKSAkKFdJTkxJQlMpICQoWkxJQkxJQlNETEwpICQoTEZMQUdTWkxJQikgL291dDokKERJUk9CSilcJChUQVJHRVQpDQorQ0MgICAgICAgPSAkKENDTk9EQkcpICQoUlRMSUIpICQoQ0ZMQUdTWkxJQikgJChDRkxBR1NMSUIpDQorQ0ZHU0VUICAgPSBUUlVFDQorIUVORElGDQorDQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KKyMgcmVsZWFzZS1zc2wtZGxsLXpsaWItZGxsDQorDQorIUlGICIkKENGRykiID09ICJyZWxlYXNlLXNzbC1kbGwtemxpYi1kbGwiDQorVEFSR0VUICAgPSAkKExJQl9OQU1FKS5saWINCitESVJPQkogICA9ICQoQ0ZHKQ0KK0xGTEFHU1pMSUIgPSAiL0xJQlBBVEg6JChaTElCX1BBVEgpIg0KK0xGTEFHU1NTTCA9ICIvTElCUEFUSDokKE9QRU5TU0xfUEFUSClcb3V0MzJkbGwiDQorTE5LICAgICAgPSAkKExOS0xJQikgJChXSU5MSUJTKSAkKFNTTExJQlMpICQoWkxJQkxJQlNETEwpICQoTEZMQUdTU1NMKSAkKExGTEFHU1pMSUIpIC9vdXQ6JChESVJPQkopXCQoVEFSR0VUKQ0KK0NDICAgICAgID0gJChDQ05PREJHKSAkKFJUTElCKSAkKENGTEFHU1NTTCkgJChDRkxBR1NaTElCKSAkKENGTEFHU0xJQikNCitDRkdTRVQgICA9IFRSVUUNCishRU5ESUYNCisNCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQorIyByZWxlYXNlLWRsbC16bGliLWRsbA0KKw0KKyFJRiAiJChDRkcpIiA9PSAicmVsZWFzZS1kbGwtemxpYi1kbGwiDQorVEFSR0VUICAgPSAkKExJQl9OQU1FKS5kbGwNCitESVJPQkogICA9ICQoQ0ZHKQ0KK0xGTEFHU1pMSUIgPSAiL0xJQlBBVEg6JChaTElCX1BBVEgpIg0KK0xOSyAgICAgID0gJChMTktETEwpICQoV0lOTElCUykgJChaTElCTElCU0RMTCkgJChMRkxBR1NaTElCKSAvb3V0OiQoRElST0JKKVwkKFRBUkdFVCkgL0lNUExJQjokKERJUk9CSilcJChJTVBMSUJfTkFNRSkubGliDQorQ0MgICAgICAgPSAkKENDTk9EQkcpICQoUlRMSUIpICQoQ0ZMQUdTWkxJQikNCitDRkdTRVQgICA9IFRSVUUNCitSRVNPVVJDRSA9ICQoRElST0JKKVxsaWJjdXJsLnJlcw0KKyFFTkRJRg0KKw0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCisjIHJlbGVhc2UtZGxsLXNzbC1kbGwtemxpYi1kbGwNCisNCishSUYgIiQoQ0ZHKSIgPT0gInJlbGVhc2UtZGxsLXNzbC1kbGwtemxpYi1kbGwiDQorVEFSR0VUICAgPSAkKExJQl9OQU1FKS5kbGwNCitESVJPQkogICA9ICQoQ0ZHKQ0KK0xGTEFHU1pMSUIgPSAiL0xJQlBBVEg6JChaTElCX1BBVEgpIg0KK0xGTEFHU1NTTCA9ICIvTElCUEFUSDokKE9QRU5TU0xfUEFUSClcb3V0MzJkbGwiDQorTE5LICAgICAgPSAkKExOS0RMTCkgJChXSU5MSUJTKSAkKFNTTExJQlMpICQoWkxJQkxJQlNETEwpICQoTEZMQUdTU1NMKSAkKExGTEFHU1pMSUIpIC9vdXQ6JChESVJPQkopXCQoVEFSR0VUKSAvSU1QTElCOiQoRElST0JKKVwkKElNUExJQl9OQU1FKS5saWINCitDQyAgICAgICA9ICQoQ0NOT0RCRykgJChSVExJQikgJChDRkxBR1NTU0wpICQoQ0ZMQUdTWkxJQikNCitDRkdTRVQgICA9IFRSVUUNCitSRVNPVVJDRSA9ICQoRElST0JKKVxsaWJjdXJsLnJlcw0KKyFFTkRJRg0KKw0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCisjIGRlYnVnDQorDQorIUlGICIkKENGRykiID09ICJkZWJ1ZyINCitUQVJHRVQgPSAkKExJQl9OQU1FX0RFQlVHKS5saWINCitESVJPQkogPSAkKENGRykNCitMTksgICAgPSAkKExOS0xJQikgL291dDokKERJUk9CSilcJChUQVJHRVQpDQorQ0MgICAgID0gJChDQ0RFQlVHKSAkKFJUTElCRCkgJChDRkxBR1NMSUIpDQorQ0ZHU0VUID0gVFJVRQ0KKyFFTkRJRg0KKw0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCisjIGRlYnVnLXNzbA0KKw0KKyFJRiAiJChDRkcpIiA9PSAiZGVidWctc3NsIg0KK1RBUkdFVCAgID0gJChMSUJfTkFNRV9ERUJVRykubGliDQorRElST0JKICAgPSAkKENGRykNCitMRkxBR1NTU0wgPSAiL0xJQlBBVEg6JChPUEVOU1NMX1BBVEgpXG91dDMyIg0KK0xOSyAgICAgID0gJChMTktMSUIpICQoTEZMQUdTU1NMKSAvb3V0OiQoRElST0JKKVwkKFRBUkdFVCkNCitDQyAgICAgICA9ICQoQ0NERUJVRykgJChSVExJQkQpICQoQ0ZMQUdTU1NMKSAkKENGTEFHU0xJQikNCitDRkdTRVQgICA9IFRSVUUNCishRU5ESUYNCisNCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQorIyBkZWJ1Zy16bGliDQorDQorIUlGICIkKENGRykiID09ICJkZWJ1Zy16bGliIg0KK1RBUkdFVCAgID0gJChMSUJfTkFNRV9ERUJVRykubGliDQorRElST0JKICAgPSAkKENGRykNCitMRkxBR1NaTElCID0gIi9MSUJQQVRIOiQoWkxJQl9QQVRIKSINCitMTksgICAgICA9ICQoTE5LTElCKSAkKFpMSUJMSUJTKSAkKExGTEFHU1pMSUIpIC9vdXQ6JChESVJPQkopXCQoVEFSR0VUKQ0KK0NDICAgICAgID0gJChDQ0RFQlVHKSAkKFJUTElCRCkgJChDRkxBR1NaTElCKSAkKENGTEFHU0xJQikNCitDRkdTRVQgICA9IFRSVUUNCishRU5ESUYNCisNCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQorIyBkZWJ1Zy1zc2wtZGxsDQorDQorIUlGICIkKENGRykiID09ICJkZWJ1Zy1zc2wtZGxsIg0KK1RBUkdFVCAgID0gJChMSUJfTkFNRV9ERUJVRykubGliDQorRElST0JKICAgPSAkKENGRykNCitMRkxBR1NTU0wgPSAvTElCUEFUSDokKE9QRU5TU0xfUEFUSClcb3V0MzJkbGwNCitMTksgICAgICA9ICQoTE5LTElCKSAkKFdJTkxJQlMpICQoU1NMTElCUykgJChMRkxBR1NTU0wpIC9vdXQ6JChESVJPQkopXCQoVEFSR0VUKQ0KK0NDICAgICAgID0gJChDQ0RFQlVHKSAkKFJUTElCRCkgJChDRkxBR1NTU0wpICQoQ0ZMQUdTTElCKQ0KK0NGR1NFVCAgID0gVFJVRQ0KKyFFTkRJRg0KKw0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCisjIGRlYnVnLXNzbC16bGliDQorDQorIUlGICIkKENGRykiID09ICJkZWJ1Zy1zc2wtemxpYiINCitUQVJHRVQgICA9ICQoTElCX05BTUVfREVCVUcpLmxpYg0KK0RJUk9CSiAgID0gJChDRkcpDQorTEZMQUdTWkxJQiA9ICIvTElCUEFUSDokKFpMSUJfUEFUSCkiDQorTEZMQUdTU1NMID0gIi9MSUJQQVRIOiQoT1BFTlNTTF9QQVRIKVxvdXQzMiINCitMTksgICAgICA9ICQoTE5LTElCKSAkKFpMSUJMSUJTKSAkKExGTEFHU1NTTCkgJChMRkxBR1NaTElCKSAvb3V0OiQoRElST0JKKVwkKFRBUkdFVCkNCitDQyAgICAgICA9ICQoQ0NERUJVRykgJChSVExJQkQpICQoQ0ZMQUdTU1NMKSAkKENGTEFHU1pMSUIpICQoQ0ZMQUdTTElCKQ0KK0NGR1NFVCAgID0gVFJVRQ0KKyFFTkRJRg0KKw0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCisjIGRlYnVnLXpsaWItZGxsDQorDQorIUlGICIkKENGRykiID09ICJkZWJ1Zy16bGliLWRsbCINCitUQVJHRVQgICA9ICQoTElCX05BTUVfREVCVUcpLmxpYg0KK0RJUk9CSiAgID0gJChDRkcpDQorTEZMQUdTWkxJQiA9ICIvTElCUEFUSDokKFpMSUJfUEFUSCkiDQorTE5LICAgICAgPSAkKExOS0xJQikgJChXSU5MSUJTKSAkKFpMSUJMSUJTRExMKSAkKExGTEFHU1pMSUIpIC9vdXQ6JChESVJPQkopXCQoVEFSR0VUKQ0KK0NDICAgICAgID0gJChDQ0RFQlVHKSAkKFJUTElCRCkgJChDRkxBR1NaTElCKSAkKENGTEFHU0xJQikNCitDRkdTRVQgICA9IFRSVUUNCishRU5ESUYNCisNCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQorIyBkZWJ1Zy1zc2wtZGxsLXpsaWItZGxsDQorDQorIUlGICIkKENGRykiID09ICJkZWJ1Zy1zc2wtZGxsLXpsaWItZGxsIg0KK1RBUkdFVCAgID0gJChMSUJfTkFNRV9ERUJVRykubGliDQorRElST0JKICAgPSAkKENGRykNCitMRkxBR1NaTElCID0gIi9MSUJQQVRIOiQoWkxJQl9QQVRIKSINCitMRkxBR1NTU0wgPSAiL0xJQlBBVEg6JChPUEVOU1NMX1BBVEgpXG91dDMyZGxsIg0KK0xOSyAgICAgID0gJChMTktMSUIpICQoV0lOTElCUykgJChTU0xMSUJTKSAkKFpMSUJMSUJTRExMKSAkKExGTEFHU1NTTCkgJChMRkxBR1NaTElCKSAvb3V0OiQoRElST0JKKVwkKFRBUkdFVCkNCitDQyAgICAgICA9ICQoQ0NERUJVRykgJChSVExJQkQpICQoQ0ZMQUdTU1NMKSAkKENGTEFHU1pMSUIpICQoQ0ZMQUdTTElCKQ0KK0NGR1NFVCAgID0gVFJVRQ0KKyFFTkRJRg0KKw0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCisjIGRlYnVnLWRsbA0KKw0KKyFJRiAiJChDRkcpIiA9PSAiZGVidWctZGxsIg0KK1RBUkdFVCA9ICQoTElCX05BTUVfREVCVUcpLmRsbA0KK0RJUk9CSiA9ICQoQ0ZHKQ0KK0xOSyAgICA9ICQoTE5LRExMKSAkKFdJTkxJQlMpIC9ERUJVRyAvb3V0OiQoRElST0JKKVwkKFRBUkdFVCkgL0lNUExJQjokKERJUk9CSilcJChJTVBMSUJfTkFNRV9ERUJVRykubGliIC9QREI6JChESVJPQkopXCQoSU1QTElCX05BTUVfREVCVUcpLnBkYg0KK0NDICAgICA9ICQoQ0NERUJVRykgJChSVExJQkQpIA0KK0NGR1NFVCA9IFRSVUUNCitSRVNPVVJDRSA9ICQoRElST0JKKVxsaWJjdXJsLnJlcw0KKyFFTkRJRg0KKw0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCisjIGRlYnVnLWRsbC1zc2wtZGxsDQorDQorIUlGICIkKENGRykiID09ICJkZWJ1Zy1kbGwtc3NsLWRsbCINCitUQVJHRVQgICA9ICQoTElCX05BTUVfREVCVUcpLmRsbA0KK0RJUk9CSiAgID0gJChDRkcpDQorTEZMQUdTU1NMID0gIi9MSUJQQVRIOiQoT1BFTlNTTF9QQVRIKVxvdXQzMmRsbCINCitMTksgICAgICA9ICQoTE5LRExMKSAkKFdJTkxJQlMpICQoU1NMTElCUykgJChMRkxBR1NTU0wpIC9ERUJVRyAvb3V0OiQoRElST0JKKVwkKFRBUkdFVCkgL0lNUExJQjokKERJUk9CSilcJChJTVBMSUJfTkFNRV9ERUJVRykubGliIC9QREI6JChESVJPQkopXCQoSU1QTElCX05BTUVfREVCVUcpLnBkYg0KK0NDICAgICAgID0gJChDQ0RFQlVHKSAkKFJUTElCRCkgJChDRkxBR1NTU0wpDQorQ0ZHU0VUICAgPSBUUlVFDQorUkVTT1VSQ0UgPSAkKERJUk9CSilcbGliY3VybC5yZXMNCishRU5ESUYNCisNCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQorIyBkZWJ1Zy1kbGwtemxpYi1kbGwNCisNCishSUYgIiQoQ0ZHKSIgPT0gImRlYnVnLWRsbC16bGliLWRsbCINCitUQVJHRVQgICA9ICQoTElCX05BTUVfREVCVUcpLmRsbA0KK0RJUk9CSiAgID0gJChDRkcpDQorTEZMQUdTWkxJQiA9ICIvTElCUEFUSDokKFpMSUJfUEFUSCkiDQorTE5LICAgICAgPSAkKExOS0RMTCkgJChXSU5MSUJTKSAkKFpMSUJMSUJTRExMKSAkKExGTEFHU1pMSUIpIC9ERUJVRyAvb3V0OiQoRElST0JKKVwkKFRBUkdFVCkgL0lNUExJQjokKERJUk9CSilcJChJTVBMSUJfTkFNRV9ERUJVRykubGliIC9QREI6JChESVJPQkopXCQoSU1QTElCX05BTUVfREVCVUcpLnBkYg0KK0NDICAgICAgID0gJChDQ0RFQlVHKSAkKFJUTElCRCkgJChDRkxBR1NaTElCKQ0KK0NGR1NFVCAgID0gVFJVRQ0KK1JFU09VUkNFID0gJChESVJPQkopXGxpYmN1cmwucmVzDQorIUVORElGDQorDQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KKyMgZGVidWctZGxsLXNzbC1kbGwtemxpYi1kbGwNCisNCishSUYgIiQoQ0ZHKSIgPT0gImRlYnVnLWRsbC1zc2wtZGxsLXpsaWItZGxsIg0KK1RBUkdFVCAgID0gJChMSUJfTkFNRV9ERUJVRykuZGxsDQorRElST0JKICAgPSAkKENGRykNCitMRkxBR1NaTElCID0gIi9MSUJQQVRIOiQoWkxJQl9QQVRIKSINCitMRkxBR1NTU0wgPSAiL0xJQlBBVEg6JChPUEVOU1NMX1BBVEgpXG91dDMyZGxsIg0KK0xOSyAgICAgID0gJChMTktETEwpICQoV0lOTElCUykgJChTU0xMSUJTKSAkKFpMSUJMSUJTRExMKSAkKExGTEFHU1NTTCkgJChMRkxBR1NaTElCKSAvREVCVUcgL291dDokKERJUk9CSilcJChUQVJHRVQpIC9JTVBMSUI6JChESVJPQkopXCQoSU1QTElCX05BTUVfREVCVUcpLmxpYiAvUERCOiQoRElST0JKKVwkKElNUExJQl9OQU1FX0RFQlVHKS5wZGINCitDQyAgICAgICA9ICQoQ0NERUJVRykgJChSVExJQkQpICQoQ0ZMQUdTU1NMKSAkKENGTEFHU1pMSUIpDQorQ0ZHU0VUICAgPSBUUlVFDQorUkVTT1VSQ0UgPSAkKERJUk9CSilcbGliY3VybC5yZXMNCishRU5ESUYNCisNCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KKyMgVXNhZ2UNCisjDQorIUlGICIkKENGR1NFVCkiID09ICJGQUxTRSIgJiYgIiQoQ0ZHKSIgIT0gIiINCishTUVTU0FHRSBVc2FnZTogbm1ha2UgL2YgbWFrZWZpbGUudmMxMCBDRkc9PGNvbmZpZz4gPHRhcmdldD4NCishTUVTU0FHRSB3aGVyZSA8Y29uZmlnPiBpcyBvbmUgb2Y6DQorIU1FU1NBR0UgICByZWxlYXNlICAgICAgICAgICAgICAgICAgICAgIC0gcmVsZWFzZSBzdGF0aWMgbGlicmFyeQ0KKyFNRVNTQUdFICAgcmVsZWFzZS1zc2wgICAgICAgICAgICAgICAgICAtIHJlbGVhc2Ugc3RhdGljIGxpYnJhcnkgd2l0aCBzc2wNCishTUVTU0FHRSAgIHJlbGVhc2UtemxpYiAgICAgICAgICAgICAgICAgLSByZWxlYXNlIHN0YXRpYyBsaWJyYXJ5IHdpdGggemxpYg0KKyFNRVNTQUdFICAgcmVsZWFzZS1zc2wtemxpYiAgICAgICAgICAgICAtIHJlbGVhc2Ugc3RhdGljIGxpYnJhcnkgd2l0aCBzc2wgYW5kIHpsaWINCishTUVTU0FHRSAgIHJlbGVhc2Utc3NsLWRsbCAgICAgICAgICAgICAgLSByZWxlYXNlIHN0YXRpYyBsaWJyYXJ5IHdpdGggZHluYW1pYyBzc2wNCishTUVTU0FHRSAgIHJlbGVhc2UtemxpYi1kbGwgICAgICAgICAgICAgLSByZWxlYXNlIHN0YXRpYyBsaWJyYXJ5IHdpdGggZHluYW1pYyB6bGliDQorIU1FU1NBR0UgICByZWxlYXNlLXNzbC1kbGwtemxpYi1kbGwgICAgIC0gcmVsZWFzZSBzdGF0aWMgbGlicmFyeSB3aXRoIGR5bmFtaWMgc3NsIGFuZCBkeW5hbWljIHpsaWINCishTUVTU0FHRSAgIHJlbGVhc2UtZGxsICAgICAgICAgICAgICAgICAgLSByZWxlYXNlIGR5bmFtaWMgbGlicmFyeQ0KKyFNRVNTQUdFICAgcmVsZWFzZS1kbGwtc3NsLWRsbCAgICAgICAgICAtIHJlbGVhc2UgZHluYW1pYyBsaWJyYXJ5IHdpdGggZHluYW1pYyBzc2wNCishTUVTU0FHRSAgIHJlbGVhc2UtZGxsLXpsaWItZGxsICAgICAgICAgLSByZWxlYXNlIGR5bmFtaWMgbGlicmFyeSB3aXRoIGR5bmFtaWMgemxpYg0KKyFNRVNTQUdFICAgcmVsZWFzZS1kbGwtc3NsLWRsbC16bGliLWRsbCAtIHJlbGVhc2UgZHluYW1pYyBsaWJyYXJ5IHdpdGggZHluYW1pYyBzc2wgYW5kIGR5bmFtaWMgemxpYg0KKyFNRVNTQUdFICAgZGVidWcgICAgICAgICAgICAgICAgICAgICAgICAtIGRlYnVnIHN0YXRpYyBsaWJyYXJ5DQorIU1FU1NBR0UgICBkZWJ1Zy1zc2wgICAgICAgICAgICAgICAgICAgIC0gZGVidWcgc3RhdGljIGxpYnJhcnkgd2l0aCBzc2wNCishTUVTU0FHRSAgIGRlYnVnLXpsaWIgICAgICAgICAgICAgICAgICAgLSBkZWJ1ZyBzdGF0aWMgbGlicmFyeSB3aXRoIHpsaWINCishTUVTU0FHRSAgIGRlYnVnLXNzbC16bGliICAgICAgICAgICAgICAgLSBkZWJ1ZyBzdGF0aWMgbGlicmFyeSB3aXRoIHNzbCBhbmQgemxpYg0KKyFNRVNTQUdFICAgZGVidWctc3NsLWRsbCAgICAgICAgICAgICAgICAtIGRlYnVnIHN0YXRpYyBsaWJyYXJ5IHdpdGggZHluYW1pYyBzc2wNCishTUVTU0FHRSAgIGRlYnVnLXpsaWItZGxsICAgICAgICAgICAgICAgLSBkZWJ1ZyBzdGF0aWMgbGlicmFyeSB3aXRoIGR5bmFtaWMgemxpYg0KKyFNRVNTQUdFICAgZGVidWctc3NsLWRsbC16bGliLWRsbCAgICAgICAtIGRlYnVnIHN0YXRpYyBsaWJyYXJ5IHdpdGggZHluYW1pYyBzc2wgYW5kIGR5bmFtaWMgemxpYg0KKyFNRVNTQUdFICAgZGVidWctZGxsICAgICAgICAgICAgICAgICAgICAtIGRlYnVnIGR5bmFtaWMgbGlicmFyeQ0KKyFNRVNTQUdFICAgZGVidWctZGxsLXNzbC1kbGwgICAgICAgICAgICAtIGRlYnVnIGR5bmFtaWMgbGlicmFyeSB3aXRoIGR5bmFtaWMgc3NsDQorIU1FU1NBR0UgICBkZWJ1Zy1kbGwtemxpYi1kbGwgICAgICAgICAgIC0gZGVidWcgZHluYW1pYyBsaWJyYXJ5IHdpdGggZHluYW1pYyB6bGliMQ0KKyFNRVNTQUdFICAgZGVidWctZGxsLXNzbC1kbGwtemxpYi1kbGwgICAtIGRlYnVnIGR5bmFtaWMgbGlicmFyeSB3aXRoIGR5bmFtaWMgc3NsIGFuZCBkeW5hbWljIHpsaWINCishTUVTU0FHRSA8dGFyZ2V0PiBjYW4gYmUgbGVmdCBibGFuayBpbiB3aGljaCBjYXNlIGFsbCBpcyBhc3N1bWVkDQorIUVSUk9SIHBsZWFzZSBjaG9vc2UgYSB2YWxpZCBjb25maWd1cmF0aW9uICIkKENGRykiDQorIUVORElGDQorDQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCisjIE9ubHkgdGhlIGNsZWFuIHRhcmdldCBjYW4gYmUgdXNlZCBpZiBhIGNvbmZpZyB3YXMgbm90IHByb3ZpZGVkLg0KKyMNCishSUYgIiQoQ0ZHU0VUKSIgPT0gIkZBTFNFIg0KK2NsZWFuOg0KKwlALWVyYXNlIC9zICouZGxsIDI+IE5VTA0KKwlALWVyYXNlIC9zICouZXhwIDI+IE5VTA0KKwlALWVyYXNlIC9zICouaWRiIDI+IE5VTA0KKwlALWVyYXNlIC9zICoubGliIDI+IE5VTA0KKwlALWVyYXNlIC9zICoub2JqIDI+IE5VTA0KKwlALWVyYXNlIC9zICoucGNoIDI+IE5VTA0KKwlALWVyYXNlIC9zICoucGRiIDI+IE5VTA0KKwlALWVyYXNlIC9zICoucmVzIDI+IE5VTA0KKyFFTFNFDQorIyBBIGNvbmZpZyB3YXMgcHJvdmlkZWQsIHNvIHRoZSBsaWJyYXJ5IGNhbiBiZSBidWlsdC4NCisjDQorWF9PQkpTPSBcDQorCSQoRElST0JKKVxiYXNlNjQub2JqIFwNCisJJChESVJPQkopXGNvbm5lY3Qub2JqIFwNCisJJChESVJPQkopXGNvbnRlbnRfZW5jb2Rpbmcub2JqIFwNCisJJChESVJPQkopXGNvb2tpZS5vYmogXA0KKwkkKERJUk9CSilcY3VybF9hZGRyaW5mby5vYmogXA0KKwkkKERJUk9CSilcY3VybF9mbm1hdGNoLm9iaiBcDQorCSQoRElST0JKKVxjdXJsX2dldGhvc3RuYW1lLm9iaiBcDQorCSQoRElST0JKKVxjdXJsX21lbXJjaHIub2JqIFwNCisJJChESVJPQkopXGN1cmxfcmFuZC5vYmogXA0KKwkkKERJUk9CSilcY3VybF9ydG1wLm9iaiBcDQorCSQoRElST0JKKVxjdXJsX3NzcGkub2JqIFwNCisJJChESVJPQkopXGN1cmxfdGhyZWFkcy5vYmogXA0KKwkkKERJUk9CSilcZGljdC5vYmogXA0KKwkkKERJUk9CSilcZWFzeS5vYmogXA0KKwkkKERJUk9CSilcZXNjYXBlLm9iaiBcDQorCSQoRElST0JKKVxmaWxlaW5mby5vYmogXA0KKwkkKERJUk9CSilcZmlsZS5vYmogXA0KKwkkKERJUk9CSilcZm9ybWRhdGEub2JqIFwNCisJJChESVJPQkopXGZ0cGxpc3RwYXJzZXIub2JqIFwNCisJJChESVJPQkopXGZ0cC5vYmogXA0KKwkkKERJUk9CSilcZ2V0ZW52Lm9iaiBcDQorCSQoRElST0JKKVxnZXRpbmZvLm9iaiBcDQorCSQoRElST0JKKVxndGxzLm9iaiBcDQorCSQoRElST0JKKVxnb3BoZXIub2JqIFwNCisJJChESVJPQkopXGhhc2gub2JqIFwNCisJJChESVJPQkopXGhtYWMub2JqIFwNCisJJChESVJPQkopXGhvc3RhcmVzLm9iaiBcDQorCSQoRElST0JKKVxob3N0YXN5bi5vYmogXA0KKwkkKERJUk9CSilcaG9zdGlwNC5vYmogXA0KKwkkKERJUk9CSilcaG9zdGlwNi5vYmogXA0KKwkkKERJUk9CSilcaG9zdGlwLm9iaiBcDQorCSQoRElST0JKKVxob3N0c3luLm9iaiBcDQorCSQoRElST0JKKVxob3N0dGhyZS5vYmogXA0KKwkkKERJUk9CSilcaHR0cF9jaHVua3Mub2JqIFwNCisJJChESVJPQkopXGh0dHBfZGlnZXN0Lm9iaiBcDQorCSQoRElST0JKKVxodHRwX25lZ290aWF0ZS5vYmogXA0KKwkkKERJUk9CSilcaHR0cF9udGxtLm9iaiBcDQorCSQoRElST0JKKVxodHRwLm9iaiBcDQorCSQoRElST0JKKVxpZjJpcC5vYmogXA0KKwkkKERJUk9CSilcaW1hcC5vYmogXA0KKwkkKERJUk9CSilcaW5ldF9udG9wLm9iaiBcDQorCSQoRElST0JKKVxpbmV0X3B0b24ub2JqIFwNCisJJChESVJPQkopXGxkYXAub2JqIFwNCisJJChESVJPQkopXGxsaXN0Lm9iaiBcDQorCSQoRElST0JKKVxtZDQub2JqIFwNCisJJChESVJPQkopXG1kNS5vYmogXA0KKwkkKERJUk9CSilcbWVtZGVidWcub2JqIFwNCisJJChESVJPQkopXG1wcmludGYub2JqIFwNCisJJChESVJPQkopXG11bHRpLm9iaiBcDQorCSQoRElST0JKKVxuZXRyYy5vYmogXA0KKyAgICAgICAgJChESVJPQkopXG5vbmJsb2NrLm9iaiBcDQorCSQoRElST0JKKVxvcGVubGRhcC5vYmogXA0KKwkkKERJUk9CSilccGFyc2VkYXRlLm9iaiBcDQorCSQoRElST0JKKVxwaW5ncG9uZy5vYmogXA0KKwkkKERJUk9CSilccG9sYXJzc2wub2JqIFwNCisJJChESVJPQkopXHBvcDMub2JqIFwNCisJJChESVJPQkopXHByb2dyZXNzLm9iaiBcDQorCSQoRElST0JKKVxyYXdzdHIub2JqIFwNCisJJChESVJPQkopXHJ0c3Aub2JqIFwNCisJJChESVJPQkopXHNlbGVjdC5vYmogXA0KKwkkKERJUk9CSilcc2VuZGYub2JqIFwNCisJJChESVJPQkopXHNoYXJlLm9iaiBcDQorCSQoRElST0JKKVxzbGlzdC5vYmogXA0KKwkkKERJUk9CSilcc210cC5vYmogXA0KKwkkKERJUk9CSilcc29ja3NfZ3NzYXBpLm9iaiBcDQorCSQoRElST0JKKVxzb2Nrcy5vYmogXA0KKwkkKERJUk9CSilcc29ja3Nfc3NwaS5vYmogXA0KKwkkKERJUk9CSilcc3BlZWRjaGVjay5vYmogXA0KKwkkKERJUk9CSilcc3BsYXkub2JqIFwNCisJJChESVJPQkopXHNzaC5vYmogXA0KKwkkKERJUk9CSilcc3NsZ2VuLm9iaiBcDQorCSQoRElST0JKKVxzc2x1c2Uub2JqIFwNCisJJChESVJPQkopXHN0cmVxdWFsLm9iaiBcDQorCSQoRElST0JKKVxzdHJlcnJvci5vYmogXA0KKwkkKERJUk9CSilcc3RydG9rLm9iaiBcDQorCSQoRElST0JKKVxzdHJ0b29mZnQub2JqIFwNCisJJChESVJPQkopXHRlbG5ldC5vYmogXA0KKwkkKERJUk9CSilcdGZ0cC5vYmogXA0KKwkkKERJUk9CSilcdGltZXZhbC5vYmogXA0KKwkkKERJUk9CSilcdHJhbnNmZXIub2JqIFwNCisJJChESVJPQkopXHVybC5vYmogXA0KKwkkKERJUk9CSilcdmVyc2lvbi5vYmogXA0KKwkkKERJUk9CSilcd2Fybmxlc3Mub2JqIFwNCisJJChESVJPQkopXHdpbGRjYXJkLm9iaiBcDQorCSQoUkVTT1VSQ0UpDQorDQorYWxsIDogJChUQVJHRVQpDQorDQorJChUQVJHRVQpOiAkKFhfT0JKUykNCisJJChMTkspICQoTEZMQUdTKSAkKFhfT0JKUykNCisJLXhjb3B5ICQoRElST0JKKVwkKExJQl9OQU1FKS5kbGwgICAgICAgLiAveQ0KKwkteGNvcHkgJChESVJPQkopXCQoTElCX05BTUUpLmxpYiAgICAgICAuIC95DQorCS14Y29weSAkKERJUk9CSilcJChMSUJfTkFNRV9ERUJVRykuZGxsIC4gL3kNCisJLXhjb3B5ICQoRElST0JKKVwkKExJQl9OQU1FX0RFQlVHKS5saWIgLiAveQ0KKwkteGNvcHkgJChESVJPQkopXCQoSU1QTElCX05BTUUpLmxpYiAgICAuIC95DQorCS14Y29weSAkKERJUk9CSilcJChJTVBMSUJfTkFNRV9ERUJVRykubGliIC4gL3kNCisJLXhjb3B5ICQoRElST0JKKVwqLmV4cCAgICAgICAgICAgICAgICAgLiAveQ0KKwkteGNvcHkgJChESVJPQkopXCoucGRiICAgICAgICAgICAgICAgICAuIC95DQorDQorJChYX09CSlMpOiAkKERJUk9CSikNCisNCiskKERJUk9CSik6DQorCUBpZiBub3QgZXhpc3QgIiQoRElST0JKKSIgbWtkaXIgJChESVJPQkopDQorDQorLlNVRkZJWEVTOiAuYyAub2JqIC5yZXMNCisNCit7Llx9LmN7JChESVJPQkopXH0ub2JqOg0KKwkkKENDKSAkKENGTEFHUykgL0ZvIiRAIiAgJDwNCisNCitkZWJ1Zy1kbGxcbGliY3VybC5yZXMgXA0KK2RlYnVnLWRsbC1zc2wtZGxsXGxpYmN1cmwucmVzIFwNCitkZWJ1Zy1kbGwtemxpYi1kbGxcbGliY3VybC5yZXMgXA0KK2RlYnVnLWRsbC1zc2wtZGxsLXpsaWItZGxsXGxpYmN1cmwucmVzOiBsaWJjdXJsLnJjDQorCXJjIC9kREVCVUdCVUlMRD0xIC9GbyAkQCBsaWJjdXJsLnJjDQorDQorcmVsZWFzZS1kbGxcbGliY3VybC5yZXMgXA0KK3JlbGVhc2UtZGxsLXNzbC1kbGxcbGliY3VybC5yZXMgXA0KK3JlbGVhc2UtZGxsLXpsaWItZGxsXGxpYmN1cmwucmVzIFwNCityZWxlYXNlLWRsbC1zc2wtZGxsLXpsaWItZGxsXGxpYmN1cmwucmVzOiBsaWJjdXJsLnJjDQorCXJjIC9kREVCVUdCVUlMRD0wIC9GbyAkQCBsaWJjdXJsLnJjDQorIUVORElGICAjIEVuZCBvZiBjYXNlIHdoZXJlIGEgY29uZmlnIHdhcyBwcm92aWRlZC4NCmRpZmYgLS1naXQgYS9saWIvTWFrZWZpbGUudmM2IGIvbGliL01ha2VmaWxlLnZjNgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZTE4ZTE0Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL01ha2VmaWxlLnZjNgpAQCAtMCwwICsxLDU3MSBAQAorIyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXw0KKyMgIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwNCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8DQorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXw0KKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198DQorIw0KKyMgQ29weXJpZ2h0IChDKSAxOTk5IC0gMjAxMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4NCisjDQorIyBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaA0KKyMgeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcw0KKyMgYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4NCisjDQorIyBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwNCisjIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcw0KKyMgZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4NCisjDQorIyBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZDQorIyBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLg0KKyMNCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCisjDQorIyBNYWtlZmlsZSBmb3IgYnVpbGRpbmcgbGliY3VybCB3aXRoIE1TVkM2DQorIw0KKyMgVXNhZ2U6IHNlZSB1c2FnZSBtZXNzYWdlIGJlbG93DQorIyAgICAgICAgU2hvdWxkIGJlIGludm9rZWQgZnJvbSBcbGliIGRpcmVjdG9yeQ0KKyMgICAgICAgIEVkaXQgdGhlIHBhdGhzIGFuZCBkZXNpcmVkIGxpYnJhcnkgbmFtZQ0KKyMgICAgICAgIFNTTCBwYXRoIGlzIG9ubHkgcmVxdWlyZWQgaWYgeW91IGludGVuZCBjb21waWxpbmcNCisjICAgICAgICB3aXRoIFNTTC4NCisjDQorIyBUaGlzIG1ha2UgZmlsZSBsZWF2ZXMgdGhlIHJlc3VsdCBlaXRoZXIgYSAubGliIG9yIC5kbGwgZmlsZQ0KKyMgaW4gdGhlIFxsaWIgZGlyZWN0b3J5LiBJdCBzaG91bGQgYmUgY2FsbGVkIGZyb20gdGhlIFxsaWINCisjIGRpcmVjdG9yeS4NCisjDQorIyBBbiBvcHRpb24gd291bGQgaGF2ZSBiZWVuIHRvIGFsbG93IHRoZSBzb3VyY2UgZGlyZWN0b3J5IHRvDQorIyBiZSBzcGVjaWZpZWQsIGJ1dCBJIHNhdyBubyByZXF1aXJlbWVudC4NCisjDQorIyBBbm90aGVyIG9wdGlvbiB3b3VsZCBoYXZlIGJlZW4gdG8gbGVhdmUgdGhlIC5saWIgYW5kIC5kbGwNCisjIGZpbGVzIGluIHRoZSAiY2ZnIiBkaXJlY3RvcnksIGJ1dCB0aGVuIHRoZSBtYWtlIGZpbGUNCisjIGluIFxzcmMgd291bGQgbmVlZCB0byBiZSBjaGFuZ2VkLg0KKyMNCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KKw0KKyMNCisjIFN0ZW0gZm9yIHN0YXRpYyBsaWJzIGFuZCBETExzDQorIw0KK0xJQl9OQU1FICAgICAgID0gbGliY3VybA0KK0xJQl9OQU1FX0RFQlVHID0gbGliY3VybGQNCisNCisjDQorIyBTdGVtIGZvciBETEwgaW1wb3J0IGxpYnMNCisjDQorSU1QTElCX05BTUUgICAgICAgPSBsaWJjdXJsX2ltcA0KK0lNUExJQl9OQU1FX0RFQlVHID0gbGliY3VybGRfaW1wDQorDQorIUlGTkRFRiBPUEVOU1NMX1BBVEgNCitPUEVOU1NMX1BBVEggICA9IC4uLy4uL29wZW5zc2wtMC45LjhvDQorIUVORElGDQorDQorIUlGTkRFRiBaTElCX1BBVEgNCitaTElCX1BBVEggID0gLi4vLi4vemxpYi0xLjIuNQ0KKyFFTkRJRg0KKw0KKyFJRk5ERUYgTUFDSElORQ0KK01BQ0hJTkUgID0gWDg2DQorIUVORElGDQorDQorIyBVU0VfV0lORE9XU19TU1BJIHVzZXMgd2luZG93cyBsaWJyYXJpZXMgdG8gYWxsb3cgTlRMTSBhdXRoZW50aWNhdGlvbg0KKyMgd2l0aG91dCBhbiBvcGVuc3NsIGluc3RhbGxhdGlvbiBhbmQgb2ZmZXJzIHRoZSBhYmlsaXR5IHRvIGF1dGhlbnRpY2F0ZQ0KKyMgdXNpbmcgdGhlICJjdXJyZW50IGxvZ2dlZCBpbiB1c2VyIi4gU2luY2UgYXQgbGVhc3Qgd2l0aCBNU1ZDNiB0aGUgc3NwaS5oDQorIyBoZWFkZXIgaXMgYnJva2VuIGl0IGlzIGVpdGhlciByZXF1aXJlZCB0byBpbnN0YWxsIHRoZSBXaW5kb3dzIFNESywNCisjIG9yIHRvIGZpeCBzc3BpLmggd2l0aCBhZGRpbmcgdGhpcyBkZWZpbmUgYXQgdGhlIGJlZ2lubmluZyBvZiBzc3BpLmg6DQorIyAjZGVmaW5lIEZyZWVDcmVkZW50aWFsSGFuZGxlIEZyZWVDcmVkZW50aWFsc0hhbmRsZQ0KKyMNCisjIElmLCBmb3Igc29tZSByZWFzb24gdGhlIFdpbmRvd3MgU0RLIGlzIGluc3RhbGxlZCBidXQgbm90IGluc3RhbGxlZA0KKyMgaW4gdGhlIGRlZmF1bHQgbG9jYXRpb24sIHlvdSBjYW4gc3BlY2lmeSBXSU5ET1dTX1NES19QQVRILg0KKyMgSXQgY2FuIGJlIGRvd25sb2FkZWQgZnJvbToNCisjIGh0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9tc2Rvd25sb2FkL3BsYXRmb3Jtc2RrL3Nka3VwZGF0ZS8NCisNCisjIFdJTkRPV1NfU1NQSSA9IDENCisNCishSUZERUYgV0lORE9XU19TU1BJDQorIUlGTkRFRiBXSU5ET1dTX1NES19QQVRIDQorV0lORE9XU19TREtfUEFUSCA9ICJDOlxQcm9ncmFtIEZpbGVzXE1pY3Jvc29mdCBTREsiDQorIUVORElGDQorIUVORElGDQorDQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KKyMjIE5vdGhpbmcgbW9yZSB0byBkbyBiZWxvdyB0aGlzIGxpbmUhDQorDQorQ0NOT0RCRyAgICA9IGNsLmV4ZSAvTzIgL0ROREVCVUcNCitDQ0RFQlVHICAgID0gY2wuZXhlIC9PZCAvR20gL1ppIC9EX0RFQlVHIC9HWg0KK0NGTEFHU1NTTCAgPSAvRFVTRV9TU0xFQVkgL0kgIiQoT1BFTlNTTF9QQVRIKS9pbmMzMiIgL0kgIiQoT1BFTlNTTF9QQVRIKS9pbmMzMi9vcGVuc3NsIg0KK0NGTEFHU1pMSUIgPSAvREhBVkVfWkxJQl9IIC9ESEFWRV9aTElCIC9ESEFWRV9MSUJaIC9JICIkKFpMSUJfUEFUSCkiDQorQ0ZMQUdTICAgICA9IC9JLiAvSS4uL2luY2x1ZGUgL25vbG9nbyAvVzMgL0dYIC9EV0lOMzIgL1lYIC9GRCAvYyAvREJVSUxESU5HX0xJQkNVUkwNCitDRkxBR1NMSUIgID0gL0RDVVJMX1NUQVRJQ0xJQg0KK0xOS0RMTCAgICAgPSBsaW5rLmV4ZSAvRExMDQorTE5LTElCICAgICA9IGxpbmsuZXhlIC9saWINCitMRkxBR1MgICAgID0gL25vbG9nbyAvbWFjaGluZTokKE1BQ0hJTkUpDQorU1NMTElCUyAgICA9IGxpYmVheTMyLmxpYiBzc2xlYXkzMi5saWINCitaTElCTElCU0RMTD0gemRsbC5saWINCitaTElCTElCUyAgID0gemxpYi5saWINCitXSU5MSUJTICAgID0gd3MyXzMyLmxpYiB3bGRhcDMyLmxpYg0KK0NGTEFHUyAgICAgPSAkKENGTEFHUykNCisNCitDRkdTRVQgICAgID0gRkFMU0UNCisNCishSUZERUYgV0lORE9XU19TU1BJDQorQ0ZMQUdTID0gJChDRkxBR1MpIC9EVVNFX1dJTkRPV1NfU1NQSSAvSSQoV0lORE9XU19TREtfUEFUSClcaW5jbHVkZQ0KKyFFTkRJRg0KKw0KKyFJRkRFRiBVU0VfSVBWNg0KK0NGTEFHUyA9ICQoQ0ZMQUdTKSAvRFVTRV9JUFY2DQorIUVORElGDQorDQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCisjIFJ1bnRpbWUgbGlicmFyeSBjb25maWd1cmF0aW9uDQorDQorUlRMSUIgICA9IC9NRA0KK1JUTElCRCAgPSAvTURkDQorDQorIUlGICIkKFJUTElCQ0ZHKSIgPT0gInN0YXRpYyINCitSVExJQiAgPSAvTVQNCitSVExJQkQgPSAvTVRkDQorIUVORElGDQorDQorDQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KKyMgcmVsZWFzZQ0KKw0KKyFJRiAiJChDRkcpIiA9PSAicmVsZWFzZSINCitUQVJHRVQgPSAkKExJQl9OQU1FKS5saWINCitESVJPQkogPSAkKENGRykNCitMTksgICAgPSAkKExOS0xJQikgL291dDokKERJUk9CSilcJChUQVJHRVQpDQorQ0MgICAgID0gJChDQ05PREJHKSAkKFJUTElCKSAkKENGTEFHU0xJQikNCitDRkdTRVQgPSBUUlVFDQorIUVORElGDQorDQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KKyMgcmVsZWFzZS16bGliDQorDQorIUlGICIkKENGRykiID09ICJyZWxlYXNlLXpsaWIiDQorVEFSR0VUICAgPSAkKExJQl9OQU1FKS5saWINCitESVJPQkogICA9ICQoQ0ZHKQ0KK0xGTEFHU1pMSUIgPSAiL0xJQlBBVEg6JChaTElCX1BBVEgpIg0KK0xOSyAgICAgID0gJChMTktMSUIpICQoWkxJQkxJQlMpICQoTEZMQUdTWkxJQikgL291dDokKERJUk9CSilcJChUQVJHRVQpDQorQ0MgICAgICAgPSAkKENDTk9EQkcpICQoUlRMSUIpICQoQ0ZMQUdTWkxJQikgJChDRkxBR1NMSUIpDQorQ0ZHU0VUICAgPSBUUlVFDQorIUVORElGDQorDQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KKyMgcmVsZWFzZS1kbGwNCisNCishSUYgIiQoQ0ZHKSIgPT0gInJlbGVhc2UtZGxsIg0KK1RBUkdFVCA9ICQoTElCX05BTUUpLmRsbA0KK0RJUk9CSiA9ICQoQ0ZHKQ0KK0xOSyAgICA9ICQoTE5LRExMKSAkKFdJTkxJQlMpIC9vdXQ6JChESVJPQkopXCQoVEFSR0VUKSAvSU1QTElCOiQoRElST0JKKVwkKElNUExJQl9OQU1FKS5saWINCitDQyAgICAgPSAkKENDTk9EQkcpICQoUlRMSUIpDQorQ0ZHU0VUID0gVFJVRQ0KK1JFU09VUkNFID0gJChESVJPQkopXGxpYmN1cmwucmVzDQorIUVORElGDQorDQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KKyMgcmVsZWFzZS1zc2wNCisNCishSUYgIiQoQ0ZHKSIgPT0gInJlbGVhc2Utc3NsIg0KK1RBUkdFVCAgID0gJChMSUJfTkFNRSkubGliDQorRElST0JKICAgPSAkKENGRykNCitMRkxBR1NTU0wgPSAiL0xJQlBBVEg6JChPUEVOU1NMX1BBVEgpXG91dDMyIg0KK0xOSyAgICAgID0gJChMTktMSUIpICQoTEZMQUdTU1NMKSAvb3V0OiQoRElST0JKKVwkKFRBUkdFVCkNCitDQyAgICAgICA9ICQoQ0NOT0RCRykgJChSVExJQikgJChDRkxBR1NTU0wpICQoQ0ZMQUdTTElCKQ0KK0NGR1NFVCAgID0gVFJVRQ0KKyFFTkRJRg0KKw0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCisjIHJlbGVhc2Utc3NsLWRsbA0KKw0KKyFJRiAiJChDRkcpIiA9PSAicmVsZWFzZS1zc2wtZGxsIg0KK1RBUkdFVCAgID0gJChMSUJfTkFNRSkubGliDQorRElST0JKICAgPSAkKENGRykNCitMRkxBR1NTU0wgPSAiL0xJQlBBVEg6JChPUEVOU1NMX1BBVEgpXG91dDMyZGxsIg0KK0xOSyAgICAgID0gJChMTktMSUIpICQoV0lOTElCUykgJChTU0xMSUJTKSAkKExGTEFHU1NTTCkgL291dDokKERJUk9CSilcJChUQVJHRVQpDQorQ0MgICAgICAgPSAkKENDTk9EQkcpICQoUlRMSUIpICQoQ0ZMQUdTU1NMKSAkKENGTEFHU0xJQikNCitDRkdTRVQgICA9IFRSVUUNCishRU5ESUYNCisNCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQorIyByZWxlYXNlLXNzbC16bGliDQorDQorIUlGICIkKENGRykiID09ICJyZWxlYXNlLXNzbC16bGliIg0KK1RBUkdFVCAgID0gJChMSUJfTkFNRSkubGliDQorRElST0JKICAgPSAkKENGRykNCitMRkxBR1NTU0wgPSAiL0xJQlBBVEg6JChPUEVOU1NMX1BBVEgpXG91dDMyIg0KK0xGTEFHU1pMSUIgPSAiL0xJQlBBVEg6JChaTElCX1BBVEgpIg0KK0xOSyAgICAgID0gJChMTktMSUIpICQoTEZMQUdTU1NMKSAkKExGTEFHU1pMSUIpIC9vdXQ6JChESVJPQkopXCQoVEFSR0VUKQ0KK0NDICAgICAgID0gJChDQ05PREJHKSAkKFJUTElCKSAkKENGTEFHU1NTTCkgJChDRkxBR1NaTElCKSAkKENGTEFHU0xJQikNCitDRkdTRVQgICA9IFRSVUUNCishRU5ESUYNCisNCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQorIyByZWxlYXNlLWRsbC1zc2wtZGxsDQorDQorIUlGICIkKENGRykiID09ICJyZWxlYXNlLWRsbC1zc2wtZGxsIg0KK1RBUkdFVCAgID0gJChMSUJfTkFNRSkuZGxsDQorRElST0JKICAgPSAkKENGRykNCitMRkxBR1NTU0wgPSAiL0xJQlBBVEg6JChPUEVOU1NMX1BBVEgpXG91dDMyZGxsIg0KK0xOSyAgICAgID0gJChMTktETEwpICQoV0lOTElCUykgJChTU0xMSUJTKSAkKExGTEFHU1NTTCkgL291dDokKERJUk9CSilcJChUQVJHRVQpIC9JTVBMSUI6JChESVJPQkopXCQoSU1QTElCX05BTUUpLmxpYg0KK0NDICAgICAgID0gJChDQ05PREJHKSAkKFJUTElCKSAkKENGTEFHU1NTTCkNCitDRkdTRVQgICA9IFRSVUUNCitSRVNPVVJDRSA9ICQoRElST0JKKVxsaWJjdXJsLnJlcw0KKyFFTkRJRg0KKw0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCisjIHJlbGVhc2UtemxpYi1kbGwNCisNCishSUYgIiQoQ0ZHKSIgPT0gInJlbGVhc2UtemxpYi1kbGwiDQorVEFSR0VUICAgPSAkKExJQl9OQU1FKS5saWINCitESVJPQkogICA9ICQoQ0ZHKQ0KK0xGTEFHU1pMSUIgPSAiL0xJQlBBVEg6JChaTElCX1BBVEgpIg0KK0xOSyAgICAgID0gJChMTktMSUIpICQoV0lOTElCUykgJChaTElCTElCU0RMTCkgJChMRkxBR1NaTElCKSAvb3V0OiQoRElST0JKKVwkKFRBUkdFVCkNCitDQyAgICAgICA9ICQoQ0NOT0RCRykgJChSVExJQikgJChDRkxBR1NaTElCKSAkKENGTEFHU0xJQikNCitDRkdTRVQgICA9IFRSVUUNCishRU5ESUYNCisNCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQorIyByZWxlYXNlLXNzbC1kbGwtemxpYi1kbGwNCisNCishSUYgIiQoQ0ZHKSIgPT0gInJlbGVhc2Utc3NsLWRsbC16bGliLWRsbCINCitUQVJHRVQgICA9ICQoTElCX05BTUUpLmxpYg0KK0RJUk9CSiAgID0gJChDRkcpDQorTEZMQUdTWkxJQiA9ICIvTElCUEFUSDokKFpMSUJfUEFUSCkiDQorTEZMQUdTU1NMID0gIi9MSUJQQVRIOiQoT1BFTlNTTF9QQVRIKVxvdXQzMmRsbCINCitMTksgICAgICA9ICQoTE5LTElCKSAkKFdJTkxJQlMpICQoU1NMTElCUykgJChaTElCTElCU0RMTCkgJChMRkxBR1NTU0wpICQoTEZMQUdTWkxJQikgL291dDokKERJUk9CSilcJChUQVJHRVQpDQorQ0MgICAgICAgPSAkKENDTk9EQkcpICQoUlRMSUIpICQoQ0ZMQUdTU1NMKSAkKENGTEFHU1pMSUIpICQoQ0ZMQUdTTElCKQ0KK0NGR1NFVCAgID0gVFJVRQ0KKyFFTkRJRg0KKw0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCisjIHJlbGVhc2UtZGxsLXpsaWItZGxsDQorDQorIUlGICIkKENGRykiID09ICJyZWxlYXNlLWRsbC16bGliLWRsbCINCitUQVJHRVQgICA9ICQoTElCX05BTUUpLmRsbA0KK0RJUk9CSiAgID0gJChDRkcpDQorTEZMQUdTWkxJQiA9ICIvTElCUEFUSDokKFpMSUJfUEFUSCkiDQorTE5LICAgICAgPSAkKExOS0RMTCkgJChXSU5MSUJTKSAkKFpMSUJMSUJTRExMKSAkKExGTEFHU1pMSUIpIC9vdXQ6JChESVJPQkopXCQoVEFSR0VUKSAvSU1QTElCOiQoRElST0JKKVwkKElNUExJQl9OQU1FKS5saWINCitDQyAgICAgICA9ICQoQ0NOT0RCRykgJChSVExJQikgJChDRkxBR1NaTElCKQ0KK0NGR1NFVCAgID0gVFJVRQ0KK1JFU09VUkNFID0gJChESVJPQkopXGxpYmN1cmwucmVzDQorIUVORElGDQorDQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KKyMgcmVsZWFzZS1kbGwtc3NsLWRsbC16bGliLWRsbA0KKw0KKyFJRiAiJChDRkcpIiA9PSAicmVsZWFzZS1kbGwtc3NsLWRsbC16bGliLWRsbCINCitUQVJHRVQgICA9ICQoTElCX05BTUUpLmRsbA0KK0RJUk9CSiAgID0gJChDRkcpDQorTEZMQUdTWkxJQiA9ICIvTElCUEFUSDokKFpMSUJfUEFUSCkiDQorTEZMQUdTU1NMID0gIi9MSUJQQVRIOiQoT1BFTlNTTF9QQVRIKVxvdXQzMmRsbCINCitMTksgICAgICA9ICQoTE5LRExMKSAkKFdJTkxJQlMpICQoU1NMTElCUykgJChaTElCTElCU0RMTCkgJChMRkxBR1NTU0wpICQoTEZMQUdTWkxJQikgL291dDokKERJUk9CSilcJChUQVJHRVQpIC9JTVBMSUI6JChESVJPQkopXCQoSU1QTElCX05BTUUpLmxpYg0KK0NDICAgICAgID0gJChDQ05PREJHKSAkKFJUTElCKSAkKENGTEFHU1NTTCkgJChDRkxBR1NaTElCKQ0KK0NGR1NFVCAgID0gVFJVRQ0KK1JFU09VUkNFID0gJChESVJPQkopXGxpYmN1cmwucmVzDQorIUVORElGDQorDQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KKyMgZGVidWcNCisNCishSUYgIiQoQ0ZHKSIgPT0gImRlYnVnIg0KK1RBUkdFVCA9ICQoTElCX05BTUVfREVCVUcpLmxpYg0KK0RJUk9CSiA9ICQoQ0ZHKQ0KK0xOSyAgICA9ICQoTE5LTElCKSAvb3V0OiQoRElST0JKKVwkKFRBUkdFVCkNCitDQyAgICAgPSAkKENDREVCVUcpICQoUlRMSUJEKSAkKENGTEFHU0xJQikNCitDRkdTRVQgPSBUUlVFDQorIUVORElGDQorDQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KKyMgZGVidWctc3NsDQorDQorIUlGICIkKENGRykiID09ICJkZWJ1Zy1zc2wiDQorVEFSR0VUICAgPSAkKExJQl9OQU1FX0RFQlVHKS5saWINCitESVJPQkogICA9ICQoQ0ZHKQ0KK0xGTEFHU1NTTCA9ICIvTElCUEFUSDokKE9QRU5TU0xfUEFUSClcb3V0MzIiDQorTE5LICAgICAgPSAkKExOS0xJQikgJChMRkxBR1NTU0wpIC9vdXQ6JChESVJPQkopXCQoVEFSR0VUKQ0KK0NDICAgICAgID0gJChDQ0RFQlVHKSAkKFJUTElCRCkgJChDRkxBR1NTU0wpICQoQ0ZMQUdTTElCKQ0KK0NGR1NFVCAgID0gVFJVRQ0KKyFFTkRJRg0KKw0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCisjIGRlYnVnLXpsaWINCisNCishSUYgIiQoQ0ZHKSIgPT0gImRlYnVnLXpsaWIiDQorVEFSR0VUICAgPSAkKExJQl9OQU1FX0RFQlVHKS5saWINCitESVJPQkogICA9ICQoQ0ZHKQ0KK0xGTEFHU1pMSUIgPSAiL0xJQlBBVEg6JChaTElCX1BBVEgpIg0KK0xOSyAgICAgID0gJChMTktMSUIpICQoWkxJQkxJQlMpICQoTEZMQUdTWkxJQikgL291dDokKERJUk9CSilcJChUQVJHRVQpDQorQ0MgICAgICAgPSAkKENDREVCVUcpICQoUlRMSUJEKSAkKENGTEFHU1pMSUIpICQoQ0ZMQUdTTElCKQ0KK0NGR1NFVCAgID0gVFJVRQ0KKyFFTkRJRg0KKw0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCisjIGRlYnVnLXNzbC1kbGwNCisNCishSUYgIiQoQ0ZHKSIgPT0gImRlYnVnLXNzbC1kbGwiDQorVEFSR0VUICAgPSAkKExJQl9OQU1FX0RFQlVHKS5saWINCitESVJPQkogICA9ICQoQ0ZHKQ0KK0xGTEFHU1NTTCA9IC9MSUJQQVRIOiQoT1BFTlNTTF9QQVRIKVxvdXQzMmRsbA0KK0xOSyAgICAgID0gJChMTktMSUIpICQoV0lOTElCUykgJChTU0xMSUJTKSAkKExGTEFHU1NTTCkgL291dDokKERJUk9CSilcJChUQVJHRVQpDQorQ0MgICAgICAgPSAkKENDREVCVUcpICQoUlRMSUJEKSAkKENGTEFHU1NTTCkgJChDRkxBR1NMSUIpDQorQ0ZHU0VUICAgPSBUUlVFDQorIUVORElGDQorDQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KKyMgZGVidWctc3NsLXpsaWINCisNCishSUYgIiQoQ0ZHKSIgPT0gImRlYnVnLXNzbC16bGliIg0KK1RBUkdFVCAgID0gJChMSUJfTkFNRV9ERUJVRykubGliDQorRElST0JKICAgPSAkKENGRykNCitMRkxBR1NaTElCID0gIi9MSUJQQVRIOiQoWkxJQl9QQVRIKSINCitMRkxBR1NTU0wgPSAiL0xJQlBBVEg6JChPUEVOU1NMX1BBVEgpXG91dDMyIg0KK0xOSyAgICAgID0gJChMTktMSUIpICQoWkxJQkxJQlMpICQoTEZMQUdTU1NMKSAkKExGTEFHU1pMSUIpIC9vdXQ6JChESVJPQkopXCQoVEFSR0VUKQ0KK0NDICAgICAgID0gJChDQ0RFQlVHKSAkKFJUTElCRCkgJChDRkxBR1NTU0wpICQoQ0ZMQUdTWkxJQikgJChDRkxBR1NMSUIpDQorQ0ZHU0VUICAgPSBUUlVFDQorIUVORElGDQorDQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KKyMgZGVidWctemxpYi1kbGwNCisNCishSUYgIiQoQ0ZHKSIgPT0gImRlYnVnLXpsaWItZGxsIg0KK1RBUkdFVCAgID0gJChMSUJfTkFNRV9ERUJVRykubGliDQorRElST0JKICAgPSAkKENGRykNCitMRkxBR1NaTElCID0gIi9MSUJQQVRIOiQoWkxJQl9QQVRIKSINCitMTksgICAgICA9ICQoTE5LTElCKSAkKFdJTkxJQlMpICQoWkxJQkxJQlNETEwpICQoTEZMQUdTWkxJQikgL291dDokKERJUk9CSilcJChUQVJHRVQpDQorQ0MgICAgICAgPSAkKENDREVCVUcpICQoUlRMSUJEKSAkKENGTEFHU1pMSUIpICQoQ0ZMQUdTTElCKQ0KK0NGR1NFVCAgID0gVFJVRQ0KKyFFTkRJRg0KKw0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCisjIGRlYnVnLXNzbC1kbGwtemxpYi1kbGwNCisNCishSUYgIiQoQ0ZHKSIgPT0gImRlYnVnLXNzbC1kbGwtemxpYi1kbGwiDQorVEFSR0VUICAgPSAkKExJQl9OQU1FX0RFQlVHKS5saWINCitESVJPQkogICA9ICQoQ0ZHKQ0KK0xGTEFHU1pMSUIgPSAiL0xJQlBBVEg6JChaTElCX1BBVEgpIg0KK0xGTEFHU1NTTCA9ICIvTElCUEFUSDokKE9QRU5TU0xfUEFUSClcb3V0MzJkbGwiDQorTE5LICAgICAgPSAkKExOS0xJQikgJChXSU5MSUJTKSAkKFNTTExJQlMpICQoWkxJQkxJQlNETEwpICQoTEZMQUdTU1NMKSAkKExGTEFHU1pMSUIpIC9vdXQ6JChESVJPQkopXCQoVEFSR0VUKQ0KK0NDICAgICAgID0gJChDQ0RFQlVHKSAkKFJUTElCRCkgJChDRkxBR1NTU0wpICQoQ0ZMQUdTWkxJQikgJChDRkxBR1NMSUIpDQorQ0ZHU0VUICAgPSBUUlVFDQorIUVORElGDQorDQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KKyMgZGVidWctZGxsDQorDQorIUlGICIkKENGRykiID09ICJkZWJ1Zy1kbGwiDQorVEFSR0VUID0gJChMSUJfTkFNRV9ERUJVRykuZGxsDQorRElST0JKID0gJChDRkcpDQorTE5LICAgID0gJChMTktETEwpICQoV0lOTElCUykgL0RFQlVHIC9vdXQ6JChESVJPQkopXCQoVEFSR0VUKSAvSU1QTElCOiQoRElST0JKKVwkKElNUExJQl9OQU1FX0RFQlVHKS5saWIgL1BEQjokKERJUk9CSilcJChJTVBMSUJfTkFNRV9ERUJVRykucGRiDQorQ0MgICAgID0gJChDQ0RFQlVHKSAkKFJUTElCRCkgDQorQ0ZHU0VUID0gVFJVRQ0KK1JFU09VUkNFID0gJChESVJPQkopXGxpYmN1cmwucmVzDQorIUVORElGDQorDQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KKyMgZGVidWctZGxsLXNzbC1kbGwNCisNCishSUYgIiQoQ0ZHKSIgPT0gImRlYnVnLWRsbC1zc2wtZGxsIg0KK1RBUkdFVCAgID0gJChMSUJfTkFNRV9ERUJVRykuZGxsDQorRElST0JKICAgPSAkKENGRykNCitMRkxBR1NTU0wgPSAiL0xJQlBBVEg6JChPUEVOU1NMX1BBVEgpXG91dDMyZGxsIg0KK0xOSyAgICAgID0gJChMTktETEwpICQoV0lOTElCUykgJChTU0xMSUJTKSAkKExGTEFHU1NTTCkgL0RFQlVHIC9vdXQ6JChESVJPQkopXCQoVEFSR0VUKSAvSU1QTElCOiQoRElST0JKKVwkKElNUExJQl9OQU1FX0RFQlVHKS5saWIgL1BEQjokKERJUk9CSilcJChJTVBMSUJfTkFNRV9ERUJVRykucGRiDQorQ0MgICAgICAgPSAkKENDREVCVUcpICQoUlRMSUJEKSAkKENGTEFHU1NTTCkNCitDRkdTRVQgICA9IFRSVUUNCitSRVNPVVJDRSA9ICQoRElST0JKKVxsaWJjdXJsLnJlcw0KKyFFTkRJRg0KKw0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCisjIGRlYnVnLWRsbC16bGliLWRsbA0KKw0KKyFJRiAiJChDRkcpIiA9PSAiZGVidWctZGxsLXpsaWItZGxsIg0KK1RBUkdFVCAgID0gJChMSUJfTkFNRV9ERUJVRykuZGxsDQorRElST0JKICAgPSAkKENGRykNCitMRkxBR1NaTElCID0gIi9MSUJQQVRIOiQoWkxJQl9QQVRIKSINCitMTksgICAgICA9ICQoTE5LRExMKSAkKFdJTkxJQlMpICQoWkxJQkxJQlNETEwpICQoTEZMQUdTWkxJQikgL0RFQlVHIC9vdXQ6JChESVJPQkopXCQoVEFSR0VUKSAvSU1QTElCOiQoRElST0JKKVwkKElNUExJQl9OQU1FX0RFQlVHKS5saWIgL1BEQjokKERJUk9CSilcJChJTVBMSUJfTkFNRV9ERUJVRykucGRiDQorQ0MgICAgICAgPSAkKENDREVCVUcpICQoUlRMSUJEKSAkKENGTEFHU1pMSUIpDQorQ0ZHU0VUICAgPSBUUlVFDQorUkVTT1VSQ0UgPSAkKERJUk9CSilcbGliY3VybC5yZXMNCishRU5ESUYNCisNCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQorIyBkZWJ1Zy1kbGwtc3NsLWRsbC16bGliLWRsbA0KKw0KKyFJRiAiJChDRkcpIiA9PSAiZGVidWctZGxsLXNzbC1kbGwtemxpYi1kbGwiDQorVEFSR0VUICAgPSAkKExJQl9OQU1FX0RFQlVHKS5kbGwNCitESVJPQkogICA9ICQoQ0ZHKQ0KK0xGTEFHU1pMSUIgPSAiL0xJQlBBVEg6JChaTElCX1BBVEgpIg0KK0xGTEFHU1NTTCA9ICIvTElCUEFUSDokKE9QRU5TU0xfUEFUSClcb3V0MzJkbGwiDQorTE5LICAgICAgPSAkKExOS0RMTCkgJChXSU5MSUJTKSAkKFNTTExJQlMpICQoWkxJQkxJQlNETEwpICQoTEZMQUdTU1NMKSAkKExGTEFHU1pMSUIpIC9ERUJVRyAvb3V0OiQoRElST0JKKVwkKFRBUkdFVCkgL0lNUExJQjokKERJUk9CSilcJChJTVBMSUJfTkFNRV9ERUJVRykubGliIC9QREI6JChESVJPQkopXCQoSU1QTElCX05BTUVfREVCVUcpLnBkYg0KK0NDICAgICAgID0gJChDQ0RFQlVHKSAkKFJUTElCRCkgJChDRkxBR1NTU0wpICQoQ0ZMQUdTWkxJQikNCitDRkdTRVQgICA9IFRSVUUNCitSRVNPVVJDRSA9ICQoRElST0JKKVxsaWJjdXJsLnJlcw0KKyFFTkRJRg0KKw0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQorIyBVc2FnZQ0KKyMNCishSUYgIiQoQ0ZHU0VUKSIgPT0gIkZBTFNFIiAmJiAiJChDRkcpIiAhPSAiIg0KKyFNRVNTQUdFIFVzYWdlOiBubWFrZSAvZiBtYWtlZmlsZS52YzYgQ0ZHPTxjb25maWc+IDx0YXJnZXQ+DQorIU1FU1NBR0Ugd2hlcmUgPGNvbmZpZz4gaXMgb25lIG9mOg0KKyFNRVNTQUdFICAgcmVsZWFzZSAgICAgICAgICAgICAgICAgICAgICAtIHJlbGVhc2Ugc3RhdGljIGxpYnJhcnkNCishTUVTU0FHRSAgIHJlbGVhc2Utc3NsICAgICAgICAgICAgICAgICAgLSByZWxlYXNlIHN0YXRpYyBsaWJyYXJ5IHdpdGggc3NsDQorIU1FU1NBR0UgICByZWxlYXNlLXpsaWIgICAgICAgICAgICAgICAgIC0gcmVsZWFzZSBzdGF0aWMgbGlicmFyeSB3aXRoIHpsaWINCishTUVTU0FHRSAgIHJlbGVhc2Utc3NsLXpsaWIgICAgICAgICAgICAgLSByZWxlYXNlIHN0YXRpYyBsaWJyYXJ5IHdpdGggc3NsIGFuZCB6bGliDQorIU1FU1NBR0UgICByZWxlYXNlLXNzbC1kbGwgICAgICAgICAgICAgIC0gcmVsZWFzZSBzdGF0aWMgbGlicmFyeSB3aXRoIGR5bmFtaWMgc3NsDQorIU1FU1NBR0UgICByZWxlYXNlLXpsaWItZGxsICAgICAgICAgICAgIC0gcmVsZWFzZSBzdGF0aWMgbGlicmFyeSB3aXRoIGR5bmFtaWMgemxpYg0KKyFNRVNTQUdFICAgcmVsZWFzZS1zc2wtZGxsLXpsaWItZGxsICAgICAtIHJlbGVhc2Ugc3RhdGljIGxpYnJhcnkgd2l0aCBkeW5hbWljIHNzbCBhbmQgZHluYW1pYyB6bGliDQorIU1FU1NBR0UgICByZWxlYXNlLWRsbCAgICAgICAgICAgICAgICAgIC0gcmVsZWFzZSBkeW5hbWljIGxpYnJhcnkNCishTUVTU0FHRSAgIHJlbGVhc2UtZGxsLXNzbC1kbGwgICAgICAgICAgLSByZWxlYXNlIGR5bmFtaWMgbGlicmFyeSB3aXRoIGR5bmFtaWMgc3NsDQorIU1FU1NBR0UgICByZWxlYXNlLWRsbC16bGliLWRsbCAgICAgICAgIC0gcmVsZWFzZSBkeW5hbWljIGxpYnJhcnkgd2l0aCBkeW5hbWljIHpsaWINCishTUVTU0FHRSAgIHJlbGVhc2UtZGxsLXNzbC1kbGwtemxpYi1kbGwgLSByZWxlYXNlIGR5bmFtaWMgbGlicmFyeSB3aXRoIGR5bmFtaWMgc3NsIGFuZCBkeW5hbWljIHpsaWINCishTUVTU0FHRSAgIGRlYnVnICAgICAgICAgICAgICAgICAgICAgICAgLSBkZWJ1ZyBzdGF0aWMgbGlicmFyeQ0KKyFNRVNTQUdFICAgZGVidWctc3NsICAgICAgICAgICAgICAgICAgICAtIGRlYnVnIHN0YXRpYyBsaWJyYXJ5IHdpdGggc3NsDQorIU1FU1NBR0UgICBkZWJ1Zy16bGliICAgICAgICAgICAgICAgICAgIC0gZGVidWcgc3RhdGljIGxpYnJhcnkgd2l0aCB6bGliDQorIU1FU1NBR0UgICBkZWJ1Zy1zc2wtemxpYiAgICAgICAgICAgICAgIC0gZGVidWcgc3RhdGljIGxpYnJhcnkgd2l0aCBzc2wgYW5kIHpsaWINCishTUVTU0FHRSAgIGRlYnVnLXNzbC1kbGwgICAgICAgICAgICAgICAgLSBkZWJ1ZyBzdGF0aWMgbGlicmFyeSB3aXRoIGR5bmFtaWMgc3NsDQorIU1FU1NBR0UgICBkZWJ1Zy16bGliLWRsbCAgICAgICAgICAgICAgIC0gZGVidWcgc3RhdGljIGxpYnJhcnkgd2l0aCBkeW5hbWljIHpsaWINCishTUVTU0FHRSAgIGRlYnVnLXNzbC1kbGwtemxpYi1kbGwgICAgICAgLSBkZWJ1ZyBzdGF0aWMgbGlicmFyeSB3aXRoIGR5bmFtaWMgc3NsIGFuZCBkeW5hbWljIHpsaWINCishTUVTU0FHRSAgIGRlYnVnLWRsbCAgICAgICAgICAgICAgICAgICAgLSBkZWJ1ZyBkeW5hbWljIGxpYnJhcnkNCishTUVTU0FHRSAgIGRlYnVnLWRsbC1zc2wtZGxsICAgICAgICAgICAgLSBkZWJ1ZyBkeW5hbWljIGxpYnJhcnkgd2l0aCBkeW5hbWljIHNzbA0KKyFNRVNTQUdFICAgZGVidWctZGxsLXpsaWItZGxsICAgICAgICAgICAtIGRlYnVnIGR5bmFtaWMgbGlicmFyeSB3aXRoIGR5bmFtaWMgemxpYjENCishTUVTU0FHRSAgIGRlYnVnLWRsbC1zc2wtZGxsLXpsaWItZGxsICAgLSBkZWJ1ZyBkeW5hbWljIGxpYnJhcnkgd2l0aCBkeW5hbWljIHNzbCBhbmQgZHluYW1pYyB6bGliDQorIU1FU1NBR0UgPHRhcmdldD4gY2FuIGJlIGxlZnQgYmxhbmsgaW4gd2hpY2ggY2FzZSBhbGwgaXMgYXNzdW1lZA0KKyFFUlJPUiBwbGVhc2UgY2hvb3NlIGEgdmFsaWQgY29uZmlndXJhdGlvbiAiJChDRkcpIg0KKyFFTkRJRg0KKw0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQorIyBPbmx5IHRoZSBjbGVhbiB0YXJnZXQgY2FuIGJlIHVzZWQgaWYgYSBjb25maWcgd2FzIG5vdCBwcm92aWRlZC4NCisjDQorIUlGICIkKENGR1NFVCkiID09ICJGQUxTRSINCitjbGVhbjoNCisJQC1lcmFzZSAvcyAqLmRsbCAyPiBOVUwNCisJQC1lcmFzZSAvcyAqLmV4cCAyPiBOVUwNCisJQC1lcmFzZSAvcyAqLmlkYiAyPiBOVUwNCisJQC1lcmFzZSAvcyAqLmxpYiAyPiBOVUwNCisJQC1lcmFzZSAvcyAqLm9iaiAyPiBOVUwNCisJQC1lcmFzZSAvcyAqLnBjaCAyPiBOVUwNCisJQC1lcmFzZSAvcyAqLnBkYiAyPiBOVUwNCisJQC1lcmFzZSAvcyAqLnJlcyAyPiBOVUwNCishRUxTRQ0KKyMgQSBjb25maWcgd2FzIHByb3ZpZGVkLCBzbyB0aGUgbGlicmFyeSBjYW4gYmUgYnVpbHQuDQorIw0KK1hfT0JKUz0gXA0KKwkkKERJUk9CSilcYmFzZTY0Lm9iaiBcDQorCSQoRElST0JKKVxjb25uZWN0Lm9iaiBcDQorCSQoRElST0JKKVxjb250ZW50X2VuY29kaW5nLm9iaiBcDQorCSQoRElST0JKKVxjb29raWUub2JqIFwNCisJJChESVJPQkopXGN1cmxfYWRkcmluZm8ub2JqIFwNCisJJChESVJPQkopXGN1cmxfZm5tYXRjaC5vYmogXA0KKwkkKERJUk9CSilcY3VybF9nZXRob3N0bmFtZS5vYmogXA0KKwkkKERJUk9CSilcY3VybF9tZW1yY2hyLm9iaiBcDQorCSQoRElST0JKKVxjdXJsX3JhbmQub2JqIFwNCisJJChESVJPQkopXGN1cmxfcnRtcC5vYmogXA0KKwkkKERJUk9CSilcY3VybF9zc3BpLm9iaiBcDQorCSQoRElST0JKKVxjdXJsX3RocmVhZHMub2JqIFwNCisJJChESVJPQkopXGRpY3Qub2JqIFwNCisJJChESVJPQkopXGVhc3kub2JqIFwNCisJJChESVJPQkopXGVzY2FwZS5vYmogXA0KKwkkKERJUk9CSilcZmlsZWluZm8ub2JqIFwNCisJJChESVJPQkopXGZpbGUub2JqIFwNCisJJChESVJPQkopXGZvcm1kYXRhLm9iaiBcDQorCSQoRElST0JKKVxmdHBsaXN0cGFyc2VyLm9iaiBcDQorCSQoRElST0JKKVxmdHAub2JqIFwNCisJJChESVJPQkopXGdldGVudi5vYmogXA0KKwkkKERJUk9CSilcZ2V0aW5mby5vYmogXA0KKwkkKERJUk9CSilcZ3Rscy5vYmogXA0KKwkkKERJUk9CSilcZ29waGVyLm9iaiBcDQorCSQoRElST0JKKVxoYXNoLm9iaiBcDQorCSQoRElST0JKKVxobWFjLm9iaiBcDQorCSQoRElST0JKKVxob3N0YXJlcy5vYmogXA0KKwkkKERJUk9CSilcaG9zdGFzeW4ub2JqIFwNCisJJChESVJPQkopXGhvc3RpcDQub2JqIFwNCisJJChESVJPQkopXGhvc3RpcDYub2JqIFwNCisJJChESVJPQkopXGhvc3RpcC5vYmogXA0KKwkkKERJUk9CSilcaG9zdHN5bi5vYmogXA0KKwkkKERJUk9CSilcaG9zdHRocmUub2JqIFwNCisJJChESVJPQkopXGh0dHBfY2h1bmtzLm9iaiBcDQorCSQoRElST0JKKVxodHRwX2RpZ2VzdC5vYmogXA0KKwkkKERJUk9CSilcaHR0cF9uZWdvdGlhdGUub2JqIFwNCisJJChESVJPQkopXGh0dHBfbnRsbS5vYmogXA0KKwkkKERJUk9CSilcaHR0cC5vYmogXA0KKwkkKERJUk9CSilcaWYyaXAub2JqIFwNCisJJChESVJPQkopXGltYXAub2JqIFwNCisJJChESVJPQkopXGluZXRfbnRvcC5vYmogXA0KKwkkKERJUk9CSilcaW5ldF9wdG9uLm9iaiBcDQorCSQoRElST0JKKVxsZGFwLm9iaiBcDQorCSQoRElST0JKKVxsbGlzdC5vYmogXA0KKwkkKERJUk9CSilcbWQ0Lm9iaiBcDQorCSQoRElST0JKKVxtZDUub2JqIFwNCisJJChESVJPQkopXG1lbWRlYnVnLm9iaiBcDQorCSQoRElST0JKKVxtcHJpbnRmLm9iaiBcDQorCSQoRElST0JKKVxtdWx0aS5vYmogXA0KKwkkKERJUk9CSilcbmV0cmMub2JqIFwNCisgICAgICAgICQoRElST0JKKVxub25ibG9jay5vYmogXA0KKwkkKERJUk9CSilcb3BlbmxkYXAub2JqIFwNCisJJChESVJPQkopXHBhcnNlZGF0ZS5vYmogXA0KKwkkKERJUk9CSilccGluZ3Bvbmcub2JqIFwNCisJJChESVJPQkopXHBvbGFyc3NsLm9iaiBcDQorCSQoRElST0JKKVxwb3AzLm9iaiBcDQorCSQoRElST0JKKVxwcm9ncmVzcy5vYmogXA0KKwkkKERJUk9CSilccmF3c3RyLm9iaiBcDQorCSQoRElST0JKKVxydHNwLm9iaiBcDQorCSQoRElST0JKKVxzZWxlY3Qub2JqIFwNCisJJChESVJPQkopXHNlbmRmLm9iaiBcDQorCSQoRElST0JKKVxzaGFyZS5vYmogXA0KKwkkKERJUk9CSilcc2xpc3Qub2JqIFwNCisJJChESVJPQkopXHNtdHAub2JqIFwNCisJJChESVJPQkopXHNvY2tzX2dzc2FwaS5vYmogXA0KKwkkKERJUk9CSilcc29ja3Mub2JqIFwNCisJJChESVJPQkopXHNvY2tzX3NzcGkub2JqIFwNCisJJChESVJPQkopXHNwZWVkY2hlY2sub2JqIFwNCisJJChESVJPQkopXHNwbGF5Lm9iaiBcDQorCSQoRElST0JKKVxzc2gub2JqIFwNCisJJChESVJPQkopXHNzbGdlbi5vYmogXA0KKwkkKERJUk9CSilcc3NsdXNlLm9iaiBcDQorCSQoRElST0JKKVxzdHJlcXVhbC5vYmogXA0KKwkkKERJUk9CSilcc3RyZXJyb3Iub2JqIFwNCisJJChESVJPQkopXHN0cnRvay5vYmogXA0KKwkkKERJUk9CSilcc3RydG9vZmZ0Lm9iaiBcDQorCSQoRElST0JKKVx0ZWxuZXQub2JqIFwNCisJJChESVJPQkopXHRmdHAub2JqIFwNCisJJChESVJPQkopXHRpbWV2YWwub2JqIFwNCisJJChESVJPQkopXHRyYW5zZmVyLm9iaiBcDQorCSQoRElST0JKKVx1cmwub2JqIFwNCisJJChESVJPQkopXHZlcnNpb24ub2JqIFwNCisJJChESVJPQkopXHdhcm5sZXNzLm9iaiBcDQorCSQoRElST0JKKVx3aWxkY2FyZC5vYmogXA0KKwkkKFJFU09VUkNFKQ0KKw0KK2FsbCA6ICQoVEFSR0VUKQ0KKw0KKyQoVEFSR0VUKTogJChYX09CSlMpDQorCSQoTE5LKSAkKExGTEFHUykgJChYX09CSlMpDQorCS14Y29weSAkKERJUk9CSilcJChMSUJfTkFNRSkuZGxsICAgICAgIC4gL3kNCisJLXhjb3B5ICQoRElST0JKKVwkKExJQl9OQU1FKS5saWIgICAgICAgLiAveQ0KKwkteGNvcHkgJChESVJPQkopXCQoTElCX05BTUVfREVCVUcpLmRsbCAuIC95DQorCS14Y29weSAkKERJUk9CSilcJChMSUJfTkFNRV9ERUJVRykubGliIC4gL3kNCisJLXhjb3B5ICQoRElST0JKKVwkKElNUExJQl9OQU1FKS5saWIgICAgLiAveQ0KKwkteGNvcHkgJChESVJPQkopXCQoSU1QTElCX05BTUVfREVCVUcpLmxpYiAuIC95DQorCS14Y29weSAkKERJUk9CSilcKi5leHAgICAgICAgICAgICAgICAgIC4gL3kNCisJLXhjb3B5ICQoRElST0JKKVwqLnBkYiAgICAgICAgICAgICAgICAgLiAveQ0KKw0KKyQoWF9PQkpTKTogJChESVJPQkopDQorDQorJChESVJPQkopOg0KKwlAaWYgbm90IGV4aXN0ICIkKERJUk9CSikiIG1rZGlyICQoRElST0JKKQ0KKw0KKy5TVUZGSVhFUzogLmMgLm9iaiAucmVzDQorDQorey5cfS5jeyQoRElST0JKKVx9Lm9iajoNCisJJChDQykgJChDRkxBR1MpIC9GbyIkQCIgICQ8DQorDQorZGVidWctZGxsXGxpYmN1cmwucmVzIFwNCitkZWJ1Zy1kbGwtc3NsLWRsbFxsaWJjdXJsLnJlcyBcDQorZGVidWctZGxsLXpsaWItZGxsXGxpYmN1cmwucmVzIFwNCitkZWJ1Zy1kbGwtc3NsLWRsbC16bGliLWRsbFxsaWJjdXJsLnJlczogbGliY3VybC5yYw0KKwlyYyAvZERFQlVHQlVJTEQ9MSAvRm8gJEAgbGliY3VybC5yYw0KKw0KK3JlbGVhc2UtZGxsXGxpYmN1cmwucmVzIFwNCityZWxlYXNlLWRsbC1zc2wtZGxsXGxpYmN1cmwucmVzIFwNCityZWxlYXNlLWRsbC16bGliLWRsbFxsaWJjdXJsLnJlcyBcDQorcmVsZWFzZS1kbGwtc3NsLWRsbC16bGliLWRsbFxsaWJjdXJsLnJlczogbGliY3VybC5yYw0KKwlyYyAvZERFQlVHQlVJTEQ9MCAvRm8gJEAgbGliY3VybC5yYw0KKyFFTkRJRiAgIyBFbmQgb2YgY2FzZSB3aGVyZSBhIGNvbmZpZyB3YXMgcHJvdmlkZWQuDQpkaWZmIC0tZ2l0IGEvbGliL01ha2VmaWxlLnZjOCBiL2xpYi9NYWtlZmlsZS52YzgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWY2ZmJmMAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9NYWtlZmlsZS52YzgKQEAgLTAsMCArMSw1NzEgQEAKKyMqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8NCisjICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8DQorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfA0KKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18NCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffA0KKyMNCisjIENvcHlyaWdodCAoQykgMTk5OSAtIDIwMTAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuDQorIw0KKyMgVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gNCisjIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMNCisjIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuDQorIw0KKyMgWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsDQorIyBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMNCisjIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuDQorIw0KKyMgVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQ0KKyMgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4NCisjDQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQorIw0KKyMgTWFrZWZpbGUgZm9yIGJ1aWxkaW5nIGxpYmN1cmwgd2l0aCBNU1ZDOA0KKyMNCisjIFVzYWdlOiBzZWUgdXNhZ2UgbWVzc2FnZSBiZWxvdw0KKyMgICAgICAgIFNob3VsZCBiZSBpbnZva2VkIGZyb20gXGxpYiBkaXJlY3RvcnkNCisjICAgICAgICBFZGl0IHRoZSBwYXRocyBhbmQgZGVzaXJlZCBsaWJyYXJ5IG5hbWUNCisjICAgICAgICBTU0wgcGF0aCBpcyBvbmx5IHJlcXVpcmVkIGlmIHlvdSBpbnRlbmQgY29tcGlsaW5nDQorIyAgICAgICAgd2l0aCBTU0wuDQorIw0KKyMgVGhpcyBtYWtlIGZpbGUgbGVhdmVzIHRoZSByZXN1bHQgZWl0aGVyIGEgLmxpYiBvciAuZGxsIGZpbGUNCisjIGluIHRoZSBcbGliIGRpcmVjdG9yeS4gSXQgc2hvdWxkIGJlIGNhbGxlZCBmcm9tIHRoZSBcbGliDQorIyBkaXJlY3RvcnkuDQorIw0KKyMgQW4gb3B0aW9uIHdvdWxkIGhhdmUgYmVlbiB0byBhbGxvdyB0aGUgc291cmNlIGRpcmVjdG9yeSB0bw0KKyMgYmUgc3BlY2lmaWVkLCBidXQgSSBzYXcgbm8gcmVxdWlyZW1lbnQuDQorIw0KKyMgQW5vdGhlciBvcHRpb24gd291bGQgaGF2ZSBiZWVuIHRvIGxlYXZlIHRoZSAubGliIGFuZCAuZGxsDQorIyBmaWxlcyBpbiB0aGUgImNmZyIgZGlyZWN0b3J5LCBidXQgdGhlbiB0aGUgbWFrZSBmaWxlDQorIyBpbiBcc3JjIHdvdWxkIG5lZWQgdG8gYmUgY2hhbmdlZC4NCisjDQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCisNCisjDQorIyBTdGVtIGZvciBzdGF0aWMgbGlicyBhbmQgRExMcw0KKyMNCitMSUJfTkFNRSAgICAgICA9IGxpYmN1cmwNCitMSUJfTkFNRV9ERUJVRyA9IGxpYmN1cmxkDQorDQorIw0KKyMgU3RlbSBmb3IgRExMIGltcG9ydCBsaWJzDQorIw0KK0lNUExJQl9OQU1FICAgICAgID0gbGliY3VybF9pbXANCitJTVBMSUJfTkFNRV9ERUJVRyA9IGxpYmN1cmxkX2ltcA0KKw0KKyFJRk5ERUYgT1BFTlNTTF9QQVRIDQorT1BFTlNTTF9QQVRIICAgPSAuLi8uLi9vcGVuc3NsLTAuOS44bw0KKyFFTkRJRg0KKw0KKyFJRk5ERUYgWkxJQl9QQVRIDQorWkxJQl9QQVRIICA9IC4uLy4uL3psaWItMS4yLjUNCishRU5ESUYNCisNCishSUZOREVGIE1BQ0hJTkUNCitNQUNISU5FICA9IFg4Ng0KKyFFTkRJRg0KKw0KKyMgVVNFX1dJTkRPV1NfU1NQSSB1c2VzIHdpbmRvd3MgbGlicmFyaWVzIHRvIGFsbG93IE5UTE0gYXV0aGVudGljYXRpb24NCisjIHdpdGhvdXQgYW4gb3BlbnNzbCBpbnN0YWxsYXRpb24gYW5kIG9mZmVycyB0aGUgYWJpbGl0eSB0byBhdXRoZW50aWNhdGUNCisjIHVzaW5nIHRoZSAiY3VycmVudCBsb2dnZWQgaW4gdXNlciIuIFNpbmNlIGF0IGxlYXN0IHdpdGggTVNWQzggdGhlIHNzcGkuaA0KKyMgaGVhZGVyIGlzIGJyb2tlbiBpdCBpcyBlaXRoZXIgcmVxdWlyZWQgdG8gaW5zdGFsbCB0aGUgV2luZG93cyBTREssDQorIyBvciB0byBmaXggc3NwaS5oIHdpdGggYWRkaW5nIHRoaXMgZGVmaW5lIGF0IHRoZSBiZWdpbm5pbmcgb2Ygc3NwaS5oOg0KKyMgI2RlZmluZSBGcmVlQ3JlZGVudGlhbEhhbmRsZSBGcmVlQ3JlZGVudGlhbHNIYW5kbGUNCisjDQorIyBJZiwgZm9yIHNvbWUgcmVhc29uIHRoZSBXaW5kb3dzIFNESyBpcyBpbnN0YWxsZWQgYnV0IG5vdCBpbnN0YWxsZWQNCisjIGluIHRoZSBkZWZhdWx0IGxvY2F0aW9uLCB5b3UgY2FuIHNwZWNpZnkgV0lORE9XU19TREtfUEFUSC4NCisjIEl0IGNhbiBiZSBkb3dubG9hZGVkIGZyb206DQorIyBodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vbXNkb3dubG9hZC9wbGF0Zm9ybXNkay9zZGt1cGRhdGUvDQorDQorIyBXSU5ET1dTX1NTUEkgPSAxDQorDQorIUlGREVGIFdJTkRPV1NfU1NQSQ0KKyFJRk5ERUYgV0lORE9XU19TREtfUEFUSA0KK1dJTkRPV1NfU0RLX1BBVEggPSAiQzpcUHJvZ3JhbSBGaWxlc1xNaWNyb3NvZnQgU0RLIg0KKyFFTkRJRg0KKyFFTkRJRg0KKw0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCisjIyBOb3RoaW5nIG1vcmUgdG8gZG8gYmVsb3cgdGhpcyBsaW5lIQ0KKw0KK0NDTk9EQkcgICAgPSBjbC5leGUgL08yIC9ETkRFQlVHDQorQ0NERUJVRyAgICA9IGNsLmV4ZSAvT2QgL0dtIC9aaSAvRF9ERUJVRyAvUlRDMQ0KK0NGTEFHU1NTTCAgPSAvRFVTRV9TU0xFQVkgL0kgIiQoT1BFTlNTTF9QQVRIKS9pbmMzMiIgL0kgIiQoT1BFTlNTTF9QQVRIKS9pbmMzMi9vcGVuc3NsIg0KK0NGTEFHU1pMSUIgPSAvREhBVkVfWkxJQl9IIC9ESEFWRV9aTElCIC9ESEFWRV9MSUJaIC9JICIkKFpMSUJfUEFUSCkiDQorQ0ZMQUdTICAgICA9IC9JLiAvSS4uL2luY2x1ZGUgL25vbG9nbyAvVzMgL0VIc2MgL0RXSU4zMiAvRkQgL2MgL0RCVUlMRElOR19MSUJDVVJMDQorQ0ZMQUdTTElCICA9IC9EQ1VSTF9TVEFUSUNMSUINCitMTktETEwgICAgID0gbGluay5leGUgL0RMTA0KK0xOS0xJQiAgICAgPSBsaW5rLmV4ZSAvbGliDQorTEZMQUdTICAgICA9IC9ub2xvZ28gL21hY2hpbmU6JChNQUNISU5FKQ0KK1NTTExJQlMgICAgPSBsaWJlYXkzMi5saWIgc3NsZWF5MzIubGliDQorWkxJQkxJQlNETEw9IHpkbGwubGliDQorWkxJQkxJQlMgICA9IHpsaWIubGliDQorV0lOTElCUyAgICA9IHdzMl8zMi5saWIgYnVmZmVyb3ZlcmZsb3d1LmxpYiB3bGRhcDMyLmxpYg0KK0NGTEFHUyAgICAgPSAkKENGTEFHUykNCisNCitDRkdTRVQgICAgID0gRkFMU0UNCisNCishSUZERUYgV0lORE9XU19TU1BJDQorQ0ZMQUdTID0gJChDRkxBR1MpIC9EVVNFX1dJTkRPV1NfU1NQSSAvSSQoV0lORE9XU19TREtfUEFUSClcaW5jbHVkZQ0KKyFFTkRJRg0KKw0KKyFJRkRFRiBVU0VfSVBWNg0KK0NGTEFHUyA9ICQoQ0ZMQUdTKSAvRFVTRV9JUFY2DQorIUVORElGDQorDQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCisjIFJ1bnRpbWUgbGlicmFyeSBjb25maWd1cmF0aW9uDQorDQorUlRMSUIgICA9IC9NRA0KK1JUTElCRCAgPSAvTURkDQorDQorIUlGICIkKFJUTElCQ0ZHKSIgPT0gInN0YXRpYyINCitSVExJQiAgPSAvTVQNCitSVExJQkQgPSAvTVRkDQorIUVORElGDQorDQorDQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KKyMgcmVsZWFzZQ0KKw0KKyFJRiAiJChDRkcpIiA9PSAicmVsZWFzZSINCitUQVJHRVQgPSAkKExJQl9OQU1FKS5saWINCitESVJPQkogPSAkKENGRykNCitMTksgICAgPSAkKExOS0xJQikgL291dDokKERJUk9CSilcJChUQVJHRVQpDQorQ0MgICAgID0gJChDQ05PREJHKSAkKFJUTElCKSAkKENGTEFHU0xJQikNCitDRkdTRVQgPSBUUlVFDQorIUVORElGDQorDQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KKyMgcmVsZWFzZS16bGliDQorDQorIUlGICIkKENGRykiID09ICJyZWxlYXNlLXpsaWIiDQorVEFSR0VUICAgPSAkKExJQl9OQU1FKS5saWINCitESVJPQkogICA9ICQoQ0ZHKQ0KK0xGTEFHU1pMSUIgPSAiL0xJQlBBVEg6JChaTElCX1BBVEgpIg0KK0xOSyAgICAgID0gJChMTktMSUIpICQoWkxJQkxJQlMpICQoTEZMQUdTWkxJQikgL291dDokKERJUk9CSilcJChUQVJHRVQpDQorQ0MgICAgICAgPSAkKENDTk9EQkcpICQoUlRMSUIpICQoQ0ZMQUdTWkxJQikgJChDRkxBR1NMSUIpDQorQ0ZHU0VUICAgPSBUUlVFDQorIUVORElGDQorDQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KKyMgcmVsZWFzZS1kbGwNCisNCishSUYgIiQoQ0ZHKSIgPT0gInJlbGVhc2UtZGxsIg0KK1RBUkdFVCA9ICQoTElCX05BTUUpLmRsbA0KK0RJUk9CSiA9ICQoQ0ZHKQ0KK0xOSyAgICA9ICQoTE5LRExMKSAkKFdJTkxJQlMpIC9vdXQ6JChESVJPQkopXCQoVEFSR0VUKSAvSU1QTElCOiQoRElST0JKKVwkKElNUExJQl9OQU1FKS5saWINCitDQyAgICAgPSAkKENDTk9EQkcpICQoUlRMSUIpDQorQ0ZHU0VUID0gVFJVRQ0KK1JFU09VUkNFID0gJChESVJPQkopXGxpYmN1cmwucmVzDQorIUVORElGDQorDQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KKyMgcmVsZWFzZS1zc2wNCisNCishSUYgIiQoQ0ZHKSIgPT0gInJlbGVhc2Utc3NsIg0KK1RBUkdFVCAgID0gJChMSUJfTkFNRSkubGliDQorRElST0JKICAgPSAkKENGRykNCitMRkxBR1NTU0wgPSAiL0xJQlBBVEg6JChPUEVOU1NMX1BBVEgpXG91dDMyIg0KK0xOSyAgICAgID0gJChMTktMSUIpICQoTEZMQUdTU1NMKSAvb3V0OiQoRElST0JKKVwkKFRBUkdFVCkNCitDQyAgICAgICA9ICQoQ0NOT0RCRykgJChSVExJQikgJChDRkxBR1NTU0wpICQoQ0ZMQUdTTElCKQ0KK0NGR1NFVCAgID0gVFJVRQ0KKyFFTkRJRg0KKw0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCisjIHJlbGVhc2Utc3NsLWRsbA0KKw0KKyFJRiAiJChDRkcpIiA9PSAicmVsZWFzZS1zc2wtZGxsIg0KK1RBUkdFVCAgID0gJChMSUJfTkFNRSkubGliDQorRElST0JKICAgPSAkKENGRykNCitMRkxBR1NTU0wgPSAiL0xJQlBBVEg6JChPUEVOU1NMX1BBVEgpXG91dDMyZGxsIg0KK0xOSyAgICAgID0gJChMTktMSUIpICQoV0lOTElCUykgJChTU0xMSUJTKSAkKExGTEFHU1NTTCkgL291dDokKERJUk9CSilcJChUQVJHRVQpDQorQ0MgICAgICAgPSAkKENDTk9EQkcpICQoUlRMSUIpICQoQ0ZMQUdTU1NMKSAkKENGTEFHU0xJQikNCitDRkdTRVQgICA9IFRSVUUNCishRU5ESUYNCisNCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQorIyByZWxlYXNlLXNzbC16bGliDQorDQorIUlGICIkKENGRykiID09ICJyZWxlYXNlLXNzbC16bGliIg0KK1RBUkdFVCAgID0gJChMSUJfTkFNRSkubGliDQorRElST0JKICAgPSAkKENGRykNCitMRkxBR1NTU0wgPSAiL0xJQlBBVEg6JChPUEVOU1NMX1BBVEgpXG91dDMyIg0KK0xGTEFHU1pMSUIgPSAiL0xJQlBBVEg6JChaTElCX1BBVEgpIg0KK0xOSyAgICAgID0gJChMTktMSUIpICQoTEZMQUdTU1NMKSAkKExGTEFHU1pMSUIpIC9vdXQ6JChESVJPQkopXCQoVEFSR0VUKQ0KK0NDICAgICAgID0gJChDQ05PREJHKSAkKFJUTElCKSAkKENGTEFHU1NTTCkgJChDRkxBR1NaTElCKSAkKENGTEFHU0xJQikNCitDRkdTRVQgICA9IFRSVUUNCishRU5ESUYNCisNCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQorIyByZWxlYXNlLWRsbC1zc2wtZGxsDQorDQorIUlGICIkKENGRykiID09ICJyZWxlYXNlLWRsbC1zc2wtZGxsIg0KK1RBUkdFVCAgID0gJChMSUJfTkFNRSkuZGxsDQorRElST0JKICAgPSAkKENGRykNCitMRkxBR1NTU0wgPSAiL0xJQlBBVEg6JChPUEVOU1NMX1BBVEgpXG91dDMyZGxsIg0KK0xOSyAgICAgID0gJChMTktETEwpICQoV0lOTElCUykgJChTU0xMSUJTKSAkKExGTEFHU1NTTCkgL291dDokKERJUk9CSilcJChUQVJHRVQpIC9JTVBMSUI6JChESVJPQkopXCQoSU1QTElCX05BTUUpLmxpYg0KK0NDICAgICAgID0gJChDQ05PREJHKSAkKFJUTElCKSAkKENGTEFHU1NTTCkNCitDRkdTRVQgICA9IFRSVUUNCitSRVNPVVJDRSA9ICQoRElST0JKKVxsaWJjdXJsLnJlcw0KKyFFTkRJRg0KKw0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCisjIHJlbGVhc2UtemxpYi1kbGwNCisNCishSUYgIiQoQ0ZHKSIgPT0gInJlbGVhc2UtemxpYi1kbGwiDQorVEFSR0VUICAgPSAkKExJQl9OQU1FKS5saWINCitESVJPQkogICA9ICQoQ0ZHKQ0KK0xGTEFHU1pMSUIgPSAiL0xJQlBBVEg6JChaTElCX1BBVEgpIg0KK0xOSyAgICAgID0gJChMTktMSUIpICQoV0lOTElCUykgJChaTElCTElCU0RMTCkgJChMRkxBR1NaTElCKSAvb3V0OiQoRElST0JKKVwkKFRBUkdFVCkNCitDQyAgICAgICA9ICQoQ0NOT0RCRykgJChSVExJQikgJChDRkxBR1NaTElCKSAkKENGTEFHU0xJQikNCitDRkdTRVQgICA9IFRSVUUNCishRU5ESUYNCisNCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQorIyByZWxlYXNlLXNzbC1kbGwtemxpYi1kbGwNCisNCishSUYgIiQoQ0ZHKSIgPT0gInJlbGVhc2Utc3NsLWRsbC16bGliLWRsbCINCitUQVJHRVQgICA9ICQoTElCX05BTUUpLmxpYg0KK0RJUk9CSiAgID0gJChDRkcpDQorTEZMQUdTWkxJQiA9ICIvTElCUEFUSDokKFpMSUJfUEFUSCkiDQorTEZMQUdTU1NMID0gIi9MSUJQQVRIOiQoT1BFTlNTTF9QQVRIKVxvdXQzMmRsbCINCitMTksgICAgICA9ICQoTE5LTElCKSAkKFdJTkxJQlMpICQoU1NMTElCUykgJChaTElCTElCU0RMTCkgJChMRkxBR1NTU0wpICQoTEZMQUdTWkxJQikgL291dDokKERJUk9CSilcJChUQVJHRVQpDQorQ0MgICAgICAgPSAkKENDTk9EQkcpICQoUlRMSUIpICQoQ0ZMQUdTU1NMKSAkKENGTEFHU1pMSUIpICQoQ0ZMQUdTTElCKQ0KK0NGR1NFVCAgID0gVFJVRQ0KKyFFTkRJRg0KKw0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCisjIHJlbGVhc2UtZGxsLXpsaWItZGxsDQorDQorIUlGICIkKENGRykiID09ICJyZWxlYXNlLWRsbC16bGliLWRsbCINCitUQVJHRVQgICA9ICQoTElCX05BTUUpLmRsbA0KK0RJUk9CSiAgID0gJChDRkcpDQorTEZMQUdTWkxJQiA9ICIvTElCUEFUSDokKFpMSUJfUEFUSCkiDQorTE5LICAgICAgPSAkKExOS0RMTCkgJChXSU5MSUJTKSAkKFpMSUJMSUJTRExMKSAkKExGTEFHU1pMSUIpIC9vdXQ6JChESVJPQkopXCQoVEFSR0VUKSAvSU1QTElCOiQoRElST0JKKVwkKElNUExJQl9OQU1FKS5saWINCitDQyAgICAgICA9ICQoQ0NOT0RCRykgJChSVExJQikgJChDRkxBR1NaTElCKQ0KK0NGR1NFVCAgID0gVFJVRQ0KK1JFU09VUkNFID0gJChESVJPQkopXGxpYmN1cmwucmVzDQorIUVORElGDQorDQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KKyMgcmVsZWFzZS1kbGwtc3NsLWRsbC16bGliLWRsbA0KKw0KKyFJRiAiJChDRkcpIiA9PSAicmVsZWFzZS1kbGwtc3NsLWRsbC16bGliLWRsbCINCitUQVJHRVQgICA9ICQoTElCX05BTUUpLmRsbA0KK0RJUk9CSiAgID0gJChDRkcpDQorTEZMQUdTWkxJQiA9ICIvTElCUEFUSDokKFpMSUJfUEFUSCkiDQorTEZMQUdTU1NMID0gIi9MSUJQQVRIOiQoT1BFTlNTTF9QQVRIKVxvdXQzMmRsbCINCitMTksgICAgICA9ICQoTE5LRExMKSAkKFdJTkxJQlMpICQoU1NMTElCUykgJChaTElCTElCU0RMTCkgJChMRkxBR1NTU0wpICQoTEZMQUdTWkxJQikgL291dDokKERJUk9CSilcJChUQVJHRVQpIC9JTVBMSUI6JChESVJPQkopXCQoSU1QTElCX05BTUUpLmxpYg0KK0NDICAgICAgID0gJChDQ05PREJHKSAkKFJUTElCKSAkKENGTEFHU1NTTCkgJChDRkxBR1NaTElCKQ0KK0NGR1NFVCAgID0gVFJVRQ0KK1JFU09VUkNFID0gJChESVJPQkopXGxpYmN1cmwucmVzDQorIUVORElGDQorDQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KKyMgZGVidWcNCisNCishSUYgIiQoQ0ZHKSIgPT0gImRlYnVnIg0KK1RBUkdFVCA9ICQoTElCX05BTUVfREVCVUcpLmxpYg0KK0RJUk9CSiA9ICQoQ0ZHKQ0KK0xOSyAgICA9ICQoTE5LTElCKSAvb3V0OiQoRElST0JKKVwkKFRBUkdFVCkNCitDQyAgICAgPSAkKENDREVCVUcpICQoUlRMSUJEKSAkKENGTEFHU0xJQikNCitDRkdTRVQgPSBUUlVFDQorIUVORElGDQorDQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KKyMgZGVidWctc3NsDQorDQorIUlGICIkKENGRykiID09ICJkZWJ1Zy1zc2wiDQorVEFSR0VUICAgPSAkKExJQl9OQU1FX0RFQlVHKS5saWINCitESVJPQkogICA9ICQoQ0ZHKQ0KK0xGTEFHU1NTTCA9ICIvTElCUEFUSDokKE9QRU5TU0xfUEFUSClcb3V0MzIiDQorTE5LICAgICAgPSAkKExOS0xJQikgJChMRkxBR1NTU0wpIC9vdXQ6JChESVJPQkopXCQoVEFSR0VUKQ0KK0NDICAgICAgID0gJChDQ0RFQlVHKSAkKFJUTElCRCkgJChDRkxBR1NTU0wpICQoQ0ZMQUdTTElCKQ0KK0NGR1NFVCAgID0gVFJVRQ0KKyFFTkRJRg0KKw0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCisjIGRlYnVnLXpsaWINCisNCishSUYgIiQoQ0ZHKSIgPT0gImRlYnVnLXpsaWIiDQorVEFSR0VUICAgPSAkKExJQl9OQU1FX0RFQlVHKS5saWINCitESVJPQkogICA9ICQoQ0ZHKQ0KK0xGTEFHU1pMSUIgPSAiL0xJQlBBVEg6JChaTElCX1BBVEgpIg0KK0xOSyAgICAgID0gJChMTktMSUIpICQoWkxJQkxJQlMpICQoTEZMQUdTWkxJQikgL291dDokKERJUk9CSilcJChUQVJHRVQpDQorQ0MgICAgICAgPSAkKENDREVCVUcpICQoUlRMSUJEKSAkKENGTEFHU1pMSUIpICQoQ0ZMQUdTTElCKQ0KK0NGR1NFVCAgID0gVFJVRQ0KKyFFTkRJRg0KKw0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCisjIGRlYnVnLXNzbC1kbGwNCisNCishSUYgIiQoQ0ZHKSIgPT0gImRlYnVnLXNzbC1kbGwiDQorVEFSR0VUICAgPSAkKExJQl9OQU1FX0RFQlVHKS5saWINCitESVJPQkogICA9ICQoQ0ZHKQ0KK0xGTEFHU1NTTCA9IC9MSUJQQVRIOiQoT1BFTlNTTF9QQVRIKVxvdXQzMmRsbA0KK0xOSyAgICAgID0gJChMTktMSUIpICQoV0lOTElCUykgJChTU0xMSUJTKSAkKExGTEFHU1NTTCkgL291dDokKERJUk9CSilcJChUQVJHRVQpDQorQ0MgICAgICAgPSAkKENDREVCVUcpICQoUlRMSUJEKSAkKENGTEFHU1NTTCkgJChDRkxBR1NMSUIpDQorQ0ZHU0VUICAgPSBUUlVFDQorIUVORElGDQorDQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KKyMgZGVidWctc3NsLXpsaWINCisNCishSUYgIiQoQ0ZHKSIgPT0gImRlYnVnLXNzbC16bGliIg0KK1RBUkdFVCAgID0gJChMSUJfTkFNRV9ERUJVRykubGliDQorRElST0JKICAgPSAkKENGRykNCitMRkxBR1NaTElCID0gIi9MSUJQQVRIOiQoWkxJQl9QQVRIKSINCitMRkxBR1NTU0wgPSAiL0xJQlBBVEg6JChPUEVOU1NMX1BBVEgpXG91dDMyIg0KK0xOSyAgICAgID0gJChMTktMSUIpICQoWkxJQkxJQlMpICQoTEZMQUdTU1NMKSAkKExGTEFHU1pMSUIpIC9vdXQ6JChESVJPQkopXCQoVEFSR0VUKQ0KK0NDICAgICAgID0gJChDQ0RFQlVHKSAkKFJUTElCRCkgJChDRkxBR1NTU0wpICQoQ0ZMQUdTWkxJQikgJChDRkxBR1NMSUIpDQorQ0ZHU0VUICAgPSBUUlVFDQorIUVORElGDQorDQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KKyMgZGVidWctemxpYi1kbGwNCisNCishSUYgIiQoQ0ZHKSIgPT0gImRlYnVnLXpsaWItZGxsIg0KK1RBUkdFVCAgID0gJChMSUJfTkFNRV9ERUJVRykubGliDQorRElST0JKICAgPSAkKENGRykNCitMRkxBR1NaTElCID0gIi9MSUJQQVRIOiQoWkxJQl9QQVRIKSINCitMTksgICAgICA9ICQoTE5LTElCKSAkKFdJTkxJQlMpICQoWkxJQkxJQlNETEwpICQoTEZMQUdTWkxJQikgL291dDokKERJUk9CSilcJChUQVJHRVQpDQorQ0MgICAgICAgPSAkKENDREVCVUcpICQoUlRMSUJEKSAkKENGTEFHU1pMSUIpICQoQ0ZMQUdTTElCKQ0KK0NGR1NFVCAgID0gVFJVRQ0KKyFFTkRJRg0KKw0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCisjIGRlYnVnLXNzbC1kbGwtemxpYi1kbGwNCisNCishSUYgIiQoQ0ZHKSIgPT0gImRlYnVnLXNzbC1kbGwtemxpYi1kbGwiDQorVEFSR0VUICAgPSAkKExJQl9OQU1FX0RFQlVHKS5saWINCitESVJPQkogICA9ICQoQ0ZHKQ0KK0xGTEFHU1pMSUIgPSAiL0xJQlBBVEg6JChaTElCX1BBVEgpIg0KK0xGTEFHU1NTTCA9ICIvTElCUEFUSDokKE9QRU5TU0xfUEFUSClcb3V0MzJkbGwiDQorTE5LICAgICAgPSAkKExOS0xJQikgJChXSU5MSUJTKSAkKFNTTExJQlMpICQoWkxJQkxJQlNETEwpICQoTEZMQUdTU1NMKSAkKExGTEFHU1pMSUIpIC9vdXQ6JChESVJPQkopXCQoVEFSR0VUKQ0KK0NDICAgICAgID0gJChDQ0RFQlVHKSAkKFJUTElCRCkgJChDRkxBR1NTU0wpICQoQ0ZMQUdTWkxJQikgJChDRkxBR1NMSUIpDQorQ0ZHU0VUICAgPSBUUlVFDQorIUVORElGDQorDQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KKyMgZGVidWctZGxsDQorDQorIUlGICIkKENGRykiID09ICJkZWJ1Zy1kbGwiDQorVEFSR0VUID0gJChMSUJfTkFNRV9ERUJVRykuZGxsDQorRElST0JKID0gJChDRkcpDQorTE5LICAgID0gJChMTktETEwpICQoV0lOTElCUykgL0RFQlVHIC9vdXQ6JChESVJPQkopXCQoVEFSR0VUKSAvSU1QTElCOiQoRElST0JKKVwkKElNUExJQl9OQU1FX0RFQlVHKS5saWIgL1BEQjokKERJUk9CSilcJChJTVBMSUJfTkFNRV9ERUJVRykucGRiDQorQ0MgICAgID0gJChDQ0RFQlVHKSAkKFJUTElCRCkgDQorQ0ZHU0VUID0gVFJVRQ0KK1JFU09VUkNFID0gJChESVJPQkopXGxpYmN1cmwucmVzDQorIUVORElGDQorDQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KKyMgZGVidWctZGxsLXNzbC1kbGwNCisNCishSUYgIiQoQ0ZHKSIgPT0gImRlYnVnLWRsbC1zc2wtZGxsIg0KK1RBUkdFVCAgID0gJChMSUJfTkFNRV9ERUJVRykuZGxsDQorRElST0JKICAgPSAkKENGRykNCitMRkxBR1NTU0wgPSAiL0xJQlBBVEg6JChPUEVOU1NMX1BBVEgpXG91dDMyZGxsIg0KK0xOSyAgICAgID0gJChMTktETEwpICQoV0lOTElCUykgJChTU0xMSUJTKSAkKExGTEFHU1NTTCkgL0RFQlVHIC9vdXQ6JChESVJPQkopXCQoVEFSR0VUKSAvSU1QTElCOiQoRElST0JKKVwkKElNUExJQl9OQU1FX0RFQlVHKS5saWIgL1BEQjokKERJUk9CSilcJChJTVBMSUJfTkFNRV9ERUJVRykucGRiDQorQ0MgICAgICAgPSAkKENDREVCVUcpICQoUlRMSUJEKSAkKENGTEFHU1NTTCkNCitDRkdTRVQgICA9IFRSVUUNCitSRVNPVVJDRSA9ICQoRElST0JKKVxsaWJjdXJsLnJlcw0KKyFFTkRJRg0KKw0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCisjIGRlYnVnLWRsbC16bGliLWRsbA0KKw0KKyFJRiAiJChDRkcpIiA9PSAiZGVidWctZGxsLXpsaWItZGxsIg0KK1RBUkdFVCAgID0gJChMSUJfTkFNRV9ERUJVRykuZGxsDQorRElST0JKICAgPSAkKENGRykNCitMRkxBR1NaTElCID0gIi9MSUJQQVRIOiQoWkxJQl9QQVRIKSINCitMTksgICAgICA9ICQoTE5LRExMKSAkKFdJTkxJQlMpICQoWkxJQkxJQlNETEwpICQoTEZMQUdTWkxJQikgL0RFQlVHIC9vdXQ6JChESVJPQkopXCQoVEFSR0VUKSAvSU1QTElCOiQoRElST0JKKVwkKElNUExJQl9OQU1FX0RFQlVHKS5saWIgL1BEQjokKERJUk9CSilcJChJTVBMSUJfTkFNRV9ERUJVRykucGRiDQorQ0MgICAgICAgPSAkKENDREVCVUcpICQoUlRMSUJEKSAkKENGTEFHU1pMSUIpDQorQ0ZHU0VUICAgPSBUUlVFDQorUkVTT1VSQ0UgPSAkKERJUk9CSilcbGliY3VybC5yZXMNCishRU5ESUYNCisNCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQorIyBkZWJ1Zy1kbGwtc3NsLWRsbC16bGliLWRsbA0KKw0KKyFJRiAiJChDRkcpIiA9PSAiZGVidWctZGxsLXNzbC1kbGwtemxpYi1kbGwiDQorVEFSR0VUICAgPSAkKExJQl9OQU1FX0RFQlVHKS5kbGwNCitESVJPQkogICA9ICQoQ0ZHKQ0KK0xGTEFHU1pMSUIgPSAiL0xJQlBBVEg6JChaTElCX1BBVEgpIg0KK0xGTEFHU1NTTCA9ICIvTElCUEFUSDokKE9QRU5TU0xfUEFUSClcb3V0MzJkbGwiDQorTE5LICAgICAgPSAkKExOS0RMTCkgJChXSU5MSUJTKSAkKFNTTExJQlMpICQoWkxJQkxJQlNETEwpICQoTEZMQUdTU1NMKSAkKExGTEFHU1pMSUIpIC9ERUJVRyAvb3V0OiQoRElST0JKKVwkKFRBUkdFVCkgL0lNUExJQjokKERJUk9CSilcJChJTVBMSUJfTkFNRV9ERUJVRykubGliIC9QREI6JChESVJPQkopXCQoSU1QTElCX05BTUVfREVCVUcpLnBkYg0KK0NDICAgICAgID0gJChDQ0RFQlVHKSAkKFJUTElCRCkgJChDRkxBR1NTU0wpICQoQ0ZMQUdTWkxJQikNCitDRkdTRVQgICA9IFRSVUUNCitSRVNPVVJDRSA9ICQoRElST0JKKVxsaWJjdXJsLnJlcw0KKyFFTkRJRg0KKw0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQorIyBVc2FnZQ0KKyMNCishSUYgIiQoQ0ZHU0VUKSIgPT0gIkZBTFNFIiAmJiAiJChDRkcpIiAhPSAiIg0KKyFNRVNTQUdFIFVzYWdlOiBubWFrZSAvZiBtYWtlZmlsZS52YzYgQ0ZHPTxjb25maWc+IDx0YXJnZXQ+DQorIU1FU1NBR0Ugd2hlcmUgPGNvbmZpZz4gaXMgb25lIG9mOg0KKyFNRVNTQUdFICAgcmVsZWFzZSAgICAgICAgICAgICAgICAgICAgICAtIHJlbGVhc2Ugc3RhdGljIGxpYnJhcnkNCishTUVTU0FHRSAgIHJlbGVhc2Utc3NsICAgICAgICAgICAgICAgICAgLSByZWxlYXNlIHN0YXRpYyBsaWJyYXJ5IHdpdGggc3NsDQorIU1FU1NBR0UgICByZWxlYXNlLXpsaWIgICAgICAgICAgICAgICAgIC0gcmVsZWFzZSBzdGF0aWMgbGlicmFyeSB3aXRoIHpsaWINCishTUVTU0FHRSAgIHJlbGVhc2Utc3NsLXpsaWIgICAgICAgICAgICAgLSByZWxlYXNlIHN0YXRpYyBsaWJyYXJ5IHdpdGggc3NsIGFuZCB6bGliDQorIU1FU1NBR0UgICByZWxlYXNlLXNzbC1kbGwgICAgICAgICAgICAgIC0gcmVsZWFzZSBzdGF0aWMgbGlicmFyeSB3aXRoIGR5bmFtaWMgc3NsDQorIU1FU1NBR0UgICByZWxlYXNlLXpsaWItZGxsICAgICAgICAgICAgIC0gcmVsZWFzZSBzdGF0aWMgbGlicmFyeSB3aXRoIGR5bmFtaWMgemxpYg0KKyFNRVNTQUdFICAgcmVsZWFzZS1zc2wtZGxsLXpsaWItZGxsICAgICAtIHJlbGVhc2Ugc3RhdGljIGxpYnJhcnkgd2l0aCBkeW5hbWljIHNzbCBhbmQgZHluYW1pYyB6bGliDQorIU1FU1NBR0UgICByZWxlYXNlLWRsbCAgICAgICAgICAgICAgICAgIC0gcmVsZWFzZSBkeW5hbWljIGxpYnJhcnkNCishTUVTU0FHRSAgIHJlbGVhc2UtZGxsLXNzbC1kbGwgICAgICAgICAgLSByZWxlYXNlIGR5bmFtaWMgbGlicmFyeSB3aXRoIGR5bmFtaWMgc3NsDQorIU1FU1NBR0UgICByZWxlYXNlLWRsbC16bGliLWRsbCAgICAgICAgIC0gcmVsZWFzZSBkeW5hbWljIGxpYnJhcnkgd2l0aCBkeW5hbWljIHpsaWINCishTUVTU0FHRSAgIHJlbGVhc2UtZGxsLXNzbC1kbGwtemxpYi1kbGwgLSByZWxlYXNlIGR5bmFtaWMgbGlicmFyeSB3aXRoIGR5bmFtaWMgc3NsIGFuZCBkeW5hbWljIHpsaWINCishTUVTU0FHRSAgIGRlYnVnICAgICAgICAgICAgICAgICAgICAgICAgLSBkZWJ1ZyBzdGF0aWMgbGlicmFyeQ0KKyFNRVNTQUdFICAgZGVidWctc3NsICAgICAgICAgICAgICAgICAgICAtIGRlYnVnIHN0YXRpYyBsaWJyYXJ5IHdpdGggc3NsDQorIU1FU1NBR0UgICBkZWJ1Zy16bGliICAgICAgICAgICAgICAgICAgIC0gZGVidWcgc3RhdGljIGxpYnJhcnkgd2l0aCB6bGliDQorIU1FU1NBR0UgICBkZWJ1Zy1zc2wtemxpYiAgICAgICAgICAgICAgIC0gZGVidWcgc3RhdGljIGxpYnJhcnkgd2l0aCBzc2wgYW5kIHpsaWINCishTUVTU0FHRSAgIGRlYnVnLXNzbC1kbGwgICAgICAgICAgICAgICAgLSBkZWJ1ZyBzdGF0aWMgbGlicmFyeSB3aXRoIGR5bmFtaWMgc3NsDQorIU1FU1NBR0UgICBkZWJ1Zy16bGliLWRsbCAgICAgICAgICAgICAgIC0gZGVidWcgc3RhdGljIGxpYnJhcnkgd2l0aCBkeW5hbWljIHpsaWINCishTUVTU0FHRSAgIGRlYnVnLXNzbC1kbGwtemxpYi1kbGwgICAgICAgLSBkZWJ1ZyBzdGF0aWMgbGlicmFyeSB3aXRoIGR5bmFtaWMgc3NsIGFuZCBkeW5hbWljIHpsaWINCishTUVTU0FHRSAgIGRlYnVnLWRsbCAgICAgICAgICAgICAgICAgICAgLSBkZWJ1ZyBkeW5hbWljIGxpYnJhcnkNCishTUVTU0FHRSAgIGRlYnVnLWRsbC1zc2wtZGxsICAgICAgICAgICAgLSBkZWJ1ZyBkeW5hbWljIGxpYnJhcnkgd2l0aCBkeW5hbWljIHNzbA0KKyFNRVNTQUdFICAgZGVidWctZGxsLXpsaWItZGxsICAgICAgICAgICAtIGRlYnVnIGR5bmFtaWMgbGlicmFyeSB3aXRoIGR5bmFtaWMgemxpYjENCishTUVTU0FHRSAgIGRlYnVnLWRsbC1zc2wtZGxsLXpsaWItZGxsICAgLSBkZWJ1ZyBkeW5hbWljIGxpYnJhcnkgd2l0aCBkeW5hbWljIHNzbCBhbmQgZHluYW1pYyB6bGliDQorIU1FU1NBR0UgPHRhcmdldD4gY2FuIGJlIGxlZnQgYmxhbmsgaW4gd2hpY2ggY2FzZSBhbGwgaXMgYXNzdW1lZA0KKyFFUlJPUiBwbGVhc2UgY2hvb3NlIGEgdmFsaWQgY29uZmlndXJhdGlvbiAiJChDRkcpIg0KKyFFTkRJRg0KKw0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQorIyBPbmx5IHRoZSBjbGVhbiB0YXJnZXQgY2FuIGJlIHVzZWQgaWYgYSBjb25maWcgd2FzIG5vdCBwcm92aWRlZC4NCisjDQorIUlGICIkKENGR1NFVCkiID09ICJGQUxTRSINCitjbGVhbjoNCisJQC1lcmFzZSAvcyAqLmRsbCAyPiBOVUwNCisJQC1lcmFzZSAvcyAqLmV4cCAyPiBOVUwNCisJQC1lcmFzZSAvcyAqLmlkYiAyPiBOVUwNCisJQC1lcmFzZSAvcyAqLmxpYiAyPiBOVUwNCisJQC1lcmFzZSAvcyAqLm9iaiAyPiBOVUwNCisJQC1lcmFzZSAvcyAqLnBjaCAyPiBOVUwNCisJQC1lcmFzZSAvcyAqLnBkYiAyPiBOVUwNCisJQC1lcmFzZSAvcyAqLnJlcyAyPiBOVUwNCishRUxTRQ0KKyMgQSBjb25maWcgd2FzIHByb3ZpZGVkLCBzbyB0aGUgbGlicmFyeSBjYW4gYmUgYnVpbHQuDQorIw0KK1hfT0JKUz0gXA0KKwkkKERJUk9CSilcYmFzZTY0Lm9iaiBcDQorCSQoRElST0JKKVxjb25uZWN0Lm9iaiBcDQorCSQoRElST0JKKVxjb250ZW50X2VuY29kaW5nLm9iaiBcDQorCSQoRElST0JKKVxjb29raWUub2JqIFwNCisJJChESVJPQkopXGN1cmxfYWRkcmluZm8ub2JqIFwNCisJJChESVJPQkopXGN1cmxfZm5tYXRjaC5vYmogXA0KKwkkKERJUk9CSilcY3VybF9nZXRob3N0bmFtZS5vYmogXA0KKwkkKERJUk9CSilcY3VybF9tZW1yY2hyLm9iaiBcDQorCSQoRElST0JKKVxjdXJsX3JhbmQub2JqIFwNCisJJChESVJPQkopXGN1cmxfcnRtcC5vYmogXA0KKwkkKERJUk9CSilcY3VybF9zc3BpLm9iaiBcDQorCSQoRElST0JKKVxjdXJsX3RocmVhZHMub2JqIFwNCisJJChESVJPQkopXGRpY3Qub2JqIFwNCisJJChESVJPQkopXGVhc3kub2JqIFwNCisJJChESVJPQkopXGVzY2FwZS5vYmogXA0KKwkkKERJUk9CSilcZmlsZWluZm8ub2JqIFwNCisJJChESVJPQkopXGZpbGUub2JqIFwNCisJJChESVJPQkopXGZvcm1kYXRhLm9iaiBcDQorCSQoRElST0JKKVxmdHBsaXN0cGFyc2VyLm9iaiBcDQorCSQoRElST0JKKVxmdHAub2JqIFwNCisJJChESVJPQkopXGdldGVudi5vYmogXA0KKwkkKERJUk9CSilcZ2V0aW5mby5vYmogXA0KKwkkKERJUk9CSilcZ3Rscy5vYmogXA0KKwkkKERJUk9CSilcZ29waGVyLm9iaiBcDQorCSQoRElST0JKKVxoYXNoLm9iaiBcDQorCSQoRElST0JKKVxobWFjLm9iaiBcDQorCSQoRElST0JKKVxob3N0YXJlcy5vYmogXA0KKwkkKERJUk9CSilcaG9zdGFzeW4ub2JqIFwNCisJJChESVJPQkopXGhvc3RpcDQub2JqIFwNCisJJChESVJPQkopXGhvc3RpcDYub2JqIFwNCisJJChESVJPQkopXGhvc3RpcC5vYmogXA0KKwkkKERJUk9CSilcaG9zdHN5bi5vYmogXA0KKwkkKERJUk9CSilcaG9zdHRocmUub2JqIFwNCisJJChESVJPQkopXGh0dHBfY2h1bmtzLm9iaiBcDQorCSQoRElST0JKKVxodHRwX2RpZ2VzdC5vYmogXA0KKwkkKERJUk9CSilcaHR0cF9uZWdvdGlhdGUub2JqIFwNCisJJChESVJPQkopXGh0dHBfbnRsbS5vYmogXA0KKwkkKERJUk9CSilcaHR0cC5vYmogXA0KKwkkKERJUk9CSilcaWYyaXAub2JqIFwNCisJJChESVJPQkopXGltYXAub2JqIFwNCisJJChESVJPQkopXGluZXRfbnRvcC5vYmogXA0KKwkkKERJUk9CSilcaW5ldF9wdG9uLm9iaiBcDQorCSQoRElST0JKKVxsZGFwLm9iaiBcDQorCSQoRElST0JKKVxsbGlzdC5vYmogXA0KKwkkKERJUk9CSilcbWQ0Lm9iaiBcDQorCSQoRElST0JKKVxtZDUub2JqIFwNCisJJChESVJPQkopXG1lbWRlYnVnLm9iaiBcDQorCSQoRElST0JKKVxtcHJpbnRmLm9iaiBcDQorCSQoRElST0JKKVxtdWx0aS5vYmogXA0KKwkkKERJUk9CSilcbmV0cmMub2JqIFwNCisgICAgICAgICQoRElST0JKKVxub25ibG9jay5vYmogXA0KKwkkKERJUk9CSilcb3BlbmxkYXAub2JqIFwNCisJJChESVJPQkopXHBhcnNlZGF0ZS5vYmogXA0KKwkkKERJUk9CSilccGluZ3Bvbmcub2JqIFwNCisJJChESVJPQkopXHBvbGFyc3NsLm9iaiBcDQorCSQoRElST0JKKVxwb3AzLm9iaiBcDQorCSQoRElST0JKKVxwcm9ncmVzcy5vYmogXA0KKwkkKERJUk9CSilccmF3c3RyLm9iaiBcDQorCSQoRElST0JKKVxydHNwLm9iaiBcDQorCSQoRElST0JKKVxzZWxlY3Qub2JqIFwNCisJJChESVJPQkopXHNlbmRmLm9iaiBcDQorCSQoRElST0JKKVxzaGFyZS5vYmogXA0KKwkkKERJUk9CSilcc2xpc3Qub2JqIFwNCisJJChESVJPQkopXHNtdHAub2JqIFwNCisJJChESVJPQkopXHNvY2tzX2dzc2FwaS5vYmogXA0KKwkkKERJUk9CSilcc29ja3Mub2JqIFwNCisJJChESVJPQkopXHNvY2tzX3NzcGkub2JqIFwNCisJJChESVJPQkopXHNwZWVkY2hlY2sub2JqIFwNCisJJChESVJPQkopXHNwbGF5Lm9iaiBcDQorCSQoRElST0JKKVxzc2gub2JqIFwNCisJJChESVJPQkopXHNzbGdlbi5vYmogXA0KKwkkKERJUk9CSilcc3NsdXNlLm9iaiBcDQorCSQoRElST0JKKVxzdHJlcXVhbC5vYmogXA0KKwkkKERJUk9CSilcc3RyZXJyb3Iub2JqIFwNCisJJChESVJPQkopXHN0cnRvay5vYmogXA0KKwkkKERJUk9CSilcc3RydG9vZmZ0Lm9iaiBcDQorCSQoRElST0JKKVx0ZWxuZXQub2JqIFwNCisJJChESVJPQkopXHRmdHAub2JqIFwNCisJJChESVJPQkopXHRpbWV2YWwub2JqIFwNCisJJChESVJPQkopXHRyYW5zZmVyLm9iaiBcDQorCSQoRElST0JKKVx1cmwub2JqIFwNCisJJChESVJPQkopXHZlcnNpb24ub2JqIFwNCisJJChESVJPQkopXHdhcm5sZXNzLm9iaiBcDQorCSQoRElST0JKKVx3aWxkY2FyZC5vYmogXA0KKwkkKFJFU09VUkNFKQ0KKw0KK2FsbCA6ICQoVEFSR0VUKQ0KKw0KKyQoVEFSR0VUKTogJChYX09CSlMpDQorCSQoTE5LKSAkKExGTEFHUykgJChYX09CSlMpDQorCS14Y29weSAkKERJUk9CSilcJChMSUJfTkFNRSkuZGxsICAgICAgIC4gL3kNCisJLXhjb3B5ICQoRElST0JKKVwkKExJQl9OQU1FKS5saWIgICAgICAgLiAveQ0KKwkteGNvcHkgJChESVJPQkopXCQoTElCX05BTUVfREVCVUcpLmRsbCAuIC95DQorCS14Y29weSAkKERJUk9CSilcJChMSUJfTkFNRV9ERUJVRykubGliIC4gL3kNCisJLXhjb3B5ICQoRElST0JKKVwkKElNUExJQl9OQU1FKS5saWIgICAgLiAveQ0KKwkteGNvcHkgJChESVJPQkopXCQoSU1QTElCX05BTUVfREVCVUcpLmxpYiAuIC95DQorCS14Y29weSAkKERJUk9CSilcKi5leHAgICAgICAgICAgICAgICAgIC4gL3kNCisJLXhjb3B5ICQoRElST0JKKVwqLnBkYiAgICAgICAgICAgICAgICAgLiAveQ0KKw0KKyQoWF9PQkpTKTogJChESVJPQkopDQorDQorJChESVJPQkopOg0KKwlAaWYgbm90IGV4aXN0ICIkKERJUk9CSikiIG1rZGlyICQoRElST0JKKQ0KKw0KKy5TVUZGSVhFUzogLmMgLm9iaiAucmVzDQorDQorey5cfS5jeyQoRElST0JKKVx9Lm9iajoNCisJJChDQykgJChDRkxBR1MpIC9GbyIkQCIgICQ8DQorDQorZGVidWctZGxsXGxpYmN1cmwucmVzIFwNCitkZWJ1Zy1kbGwtc3NsLWRsbFxsaWJjdXJsLnJlcyBcDQorZGVidWctZGxsLXpsaWItZGxsXGxpYmN1cmwucmVzIFwNCitkZWJ1Zy1kbGwtc3NsLWRsbC16bGliLWRsbFxsaWJjdXJsLnJlczogbGliY3VybC5yYw0KKwlyYyAvZERFQlVHQlVJTEQ9MSAvRm8gJEAgbGliY3VybC5yYw0KKw0KK3JlbGVhc2UtZGxsXGxpYmN1cmwucmVzIFwNCityZWxlYXNlLWRsbC1zc2wtZGxsXGxpYmN1cmwucmVzIFwNCityZWxlYXNlLWRsbC16bGliLWRsbFxsaWJjdXJsLnJlcyBcDQorcmVsZWFzZS1kbGwtc3NsLWRsbC16bGliLWRsbFxsaWJjdXJsLnJlczogbGliY3VybC5yYw0KKwlyYyAvZERFQlVHQlVJTEQ9MCAvRm8gJEAgbGliY3VybC5yYw0KKyFFTkRJRiAgIyBFbmQgb2YgY2FzZSB3aGVyZSBhIGNvbmZpZyB3YXMgcHJvdmlkZWQuDQpkaWZmIC0tZ2l0IGEvbGliL01ha2VmaWxlLnZjOSBiL2xpYi9NYWtlZmlsZS52YzkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2Q1ZWIyZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9NYWtlZmlsZS52YzkKQEAgLTAsMCArMSw1NzEgQEAKKyMqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8NCisjICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8DQorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfA0KKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18NCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffA0KKyMNCisjIENvcHlyaWdodCAoQykgMTk5OSAtIDIwMTAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuDQorIw0KKyMgVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gNCisjIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMNCisjIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuDQorIw0KKyMgWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsDQorIyBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMNCisjIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuDQorIw0KKyMgVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQ0KKyMgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4NCisjDQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQorIw0KKyMgTWFrZWZpbGUgZm9yIGJ1aWxkaW5nIGxpYmN1cmwgd2l0aCBNU1ZDOQ0KKyMNCisjIFVzYWdlOiBzZWUgdXNhZ2UgbWVzc2FnZSBiZWxvdw0KKyMgICAgICAgIFNob3VsZCBiZSBpbnZva2VkIGZyb20gXGxpYiBkaXJlY3RvcnkNCisjICAgICAgICBFZGl0IHRoZSBwYXRocyBhbmQgZGVzaXJlZCBsaWJyYXJ5IG5hbWUNCisjICAgICAgICBTU0wgcGF0aCBpcyBvbmx5IHJlcXVpcmVkIGlmIHlvdSBpbnRlbmQgY29tcGlsaW5nDQorIyAgICAgICAgd2l0aCBTU0wuDQorIw0KKyMgVGhpcyBtYWtlIGZpbGUgbGVhdmVzIHRoZSByZXN1bHQgZWl0aGVyIGEgLmxpYiBvciAuZGxsIGZpbGUNCisjIGluIHRoZSBcbGliIGRpcmVjdG9yeS4gSXQgc2hvdWxkIGJlIGNhbGxlZCBmcm9tIHRoZSBcbGliDQorIyBkaXJlY3RvcnkuDQorIw0KKyMgQW4gb3B0aW9uIHdvdWxkIGhhdmUgYmVlbiB0byBhbGxvdyB0aGUgc291cmNlIGRpcmVjdG9yeSB0bw0KKyMgYmUgc3BlY2lmaWVkLCBidXQgSSBzYXcgbm8gcmVxdWlyZW1lbnQuDQorIw0KKyMgQW5vdGhlciBvcHRpb24gd291bGQgaGF2ZSBiZWVuIHRvIGxlYXZlIHRoZSAubGliIGFuZCAuZGxsDQorIyBmaWxlcyBpbiB0aGUgImNmZyIgZGlyZWN0b3J5LCBidXQgdGhlbiB0aGUgbWFrZSBmaWxlDQorIyBpbiBcc3JjIHdvdWxkIG5lZWQgdG8gYmUgY2hhbmdlZC4NCisjDQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCisNCisjDQorIyBTdGVtIGZvciBzdGF0aWMgbGlicyBhbmQgRExMcw0KKyMNCitMSUJfTkFNRSAgICAgICA9IGxpYmN1cmwNCitMSUJfTkFNRV9ERUJVRyA9IGxpYmN1cmxkDQorDQorIw0KKyMgU3RlbSBmb3IgRExMIGltcG9ydCBsaWJzDQorIw0KK0lNUExJQl9OQU1FICAgICAgID0gbGliY3VybF9pbXANCitJTVBMSUJfTkFNRV9ERUJVRyA9IGxpYmN1cmxkX2ltcA0KKw0KKyFJRk5ERUYgT1BFTlNTTF9QQVRIDQorT1BFTlNTTF9QQVRIICAgPSAuLi8uLi9vcGVuc3NsLTAuOS44bw0KKyFFTkRJRg0KKw0KKyFJRk5ERUYgWkxJQl9QQVRIDQorWkxJQl9QQVRIICA9IC4uLy4uL3psaWItMS4yLjUNCishRU5ESUYNCisNCishSUZOREVGIE1BQ0hJTkUNCitNQUNISU5FICA9IFg4Ng0KKyFFTkRJRg0KKw0KKyMgVVNFX1dJTkRPV1NfU1NQSSB1c2VzIHdpbmRvd3MgbGlicmFyaWVzIHRvIGFsbG93IE5UTE0gYXV0aGVudGljYXRpb24NCisjIHdpdGhvdXQgYW4gb3BlbnNzbCBpbnN0YWxsYXRpb24gYW5kIG9mZmVycyB0aGUgYWJpbGl0eSB0byBhdXRoZW50aWNhdGUNCisjIHVzaW5nIHRoZSAiY3VycmVudCBsb2dnZWQgaW4gdXNlciIuIFNpbmNlIGF0IGxlYXN0IHdpdGggTVNWQzkgdGhlIHNzcGkuaA0KKyMgaGVhZGVyIGlzIGJyb2tlbiBpdCBpcyBlaXRoZXIgcmVxdWlyZWQgdG8gaW5zdGFsbCB0aGUgV2luZG93cyBTREssDQorIyBvciB0byBmaXggc3NwaS5oIHdpdGggYWRkaW5nIHRoaXMgZGVmaW5lIGF0IHRoZSBiZWdpbm5pbmcgb2Ygc3NwaS5oOg0KKyMgI2RlZmluZSBGcmVlQ3JlZGVudGlhbEhhbmRsZSBGcmVlQ3JlZGVudGlhbHNIYW5kbGUNCisjDQorIyBJZiwgZm9yIHNvbWUgcmVhc29uIHRoZSBXaW5kb3dzIFNESyBpcyBpbnN0YWxsZWQgYnV0IG5vdCBpbnN0YWxsZWQNCisjIGluIHRoZSBkZWZhdWx0IGxvY2F0aW9uLCB5b3UgY2FuIHNwZWNpZnkgV0lORE9XU19TREtfUEFUSC4NCisjIEl0IGNhbiBiZSBkb3dubG9hZGVkIGZyb206DQorIyBodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vbXNkb3dubG9hZC9wbGF0Zm9ybXNkay9zZGt1cGRhdGUvDQorDQorIyBXSU5ET1dTX1NTUEkgPSAxDQorDQorIUlGREVGIFdJTkRPV1NfU1NQSQ0KKyFJRk5ERUYgV0lORE9XU19TREtfUEFUSA0KK1dJTkRPV1NfU0RLX1BBVEggPSAiQzpcUHJvZ3JhbSBGaWxlc1xNaWNyb3NvZnQgU0RLIg0KKyFFTkRJRg0KKyFFTkRJRg0KKw0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCisjIyBOb3RoaW5nIG1vcmUgdG8gZG8gYmVsb3cgdGhpcyBsaW5lIQ0KKw0KK0NDTk9EQkcgICAgPSBjbC5leGUgL08yIC9ETkRFQlVHDQorQ0NERUJVRyAgICA9IGNsLmV4ZSAvT2QgL0dtIC9aaSAvRF9ERUJVRyAvUlRDMQ0KK0NGTEFHU1NTTCAgPSAvRFVTRV9TU0xFQVkgL0kgIiQoT1BFTlNTTF9QQVRIKS9pbmMzMiIgL0kgIiQoT1BFTlNTTF9QQVRIKS9pbmMzMi9vcGVuc3NsIg0KK0NGTEFHU1pMSUIgPSAvREhBVkVfWkxJQl9IIC9ESEFWRV9aTElCIC9ESEFWRV9MSUJaIC9JICIkKFpMSUJfUEFUSCkiDQorQ0ZMQUdTICAgICA9IC9JLiAvSS4uL2luY2x1ZGUgL25vbG9nbyAvVzMgL0VIc2MgL0RXSU4zMiAvRkQgL2MgL0RCVUlMRElOR19MSUJDVVJMDQorQ0ZMQUdTTElCICA9IC9EQ1VSTF9TVEFUSUNMSUINCitMTktETEwgICAgID0gbGluay5leGUgL0RMTA0KK0xOS0xJQiAgICAgPSBsaW5rLmV4ZSAvbGliDQorTEZMQUdTICAgICA9IC9ub2xvZ28gL21hY2hpbmU6JChNQUNISU5FKQ0KK1NTTExJQlMgICAgPSBsaWJlYXkzMi5saWIgc3NsZWF5MzIubGliDQorWkxJQkxJQlNETEw9IHpkbGwubGliDQorWkxJQkxJQlMgICA9IHpsaWIubGliDQorV0lOTElCUyAgICA9IHdzMl8zMi5saWIgd2xkYXAzMi5saWINCitDRkxBR1MgICAgID0gJChDRkxBR1MpDQorDQorQ0ZHU0VUICAgICA9IEZBTFNFDQorDQorIUlGREVGIFdJTkRPV1NfU1NQSQ0KK0NGTEFHUyA9ICQoQ0ZMQUdTKSAvRFVTRV9XSU5ET1dTX1NTUEkgL0kkKFdJTkRPV1NfU0RLX1BBVEgpXGluY2x1ZGUNCishRU5ESUYNCisNCishSUZERUYgVVNFX0lQVjYNCitDRkxBR1MgPSAkKENGTEFHUykgL0RVU0VfSVBWNg0KKyFFTkRJRg0KKw0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQorIyBSdW50aW1lIGxpYnJhcnkgY29uZmlndXJhdGlvbg0KKw0KK1JUTElCICAgPSAvTUQNCitSVExJQkQgID0gL01EZA0KKw0KKyFJRiAiJChSVExJQkNGRykiID09ICJzdGF0aWMiDQorUlRMSUIgID0gL01UDQorUlRMSUJEID0gL01UZA0KKyFFTkRJRg0KKw0KKw0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCisjIHJlbGVhc2UNCisNCishSUYgIiQoQ0ZHKSIgPT0gInJlbGVhc2UiDQorVEFSR0VUID0gJChMSUJfTkFNRSkubGliDQorRElST0JKID0gJChDRkcpDQorTE5LICAgID0gJChMTktMSUIpIC9vdXQ6JChESVJPQkopXCQoVEFSR0VUKQ0KK0NDICAgICA9ICQoQ0NOT0RCRykgJChSVExJQikgJChDRkxBR1NMSUIpDQorQ0ZHU0VUID0gVFJVRQ0KKyFFTkRJRg0KKw0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCisjIHJlbGVhc2UtemxpYg0KKw0KKyFJRiAiJChDRkcpIiA9PSAicmVsZWFzZS16bGliIg0KK1RBUkdFVCAgID0gJChMSUJfTkFNRSkubGliDQorRElST0JKICAgPSAkKENGRykNCitMRkxBR1NaTElCID0gIi9MSUJQQVRIOiQoWkxJQl9QQVRIKSINCitMTksgICAgICA9ICQoTE5LTElCKSAkKFpMSUJMSUJTKSAkKExGTEFHU1pMSUIpIC9vdXQ6JChESVJPQkopXCQoVEFSR0VUKQ0KK0NDICAgICAgID0gJChDQ05PREJHKSAkKFJUTElCKSAkKENGTEFHU1pMSUIpICQoQ0ZMQUdTTElCKQ0KK0NGR1NFVCAgID0gVFJVRQ0KKyFFTkRJRg0KKw0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCisjIHJlbGVhc2UtZGxsDQorDQorIUlGICIkKENGRykiID09ICJyZWxlYXNlLWRsbCINCitUQVJHRVQgPSAkKExJQl9OQU1FKS5kbGwNCitESVJPQkogPSAkKENGRykNCitMTksgICAgPSAkKExOS0RMTCkgJChXSU5MSUJTKSAvb3V0OiQoRElST0JKKVwkKFRBUkdFVCkgL0lNUExJQjokKERJUk9CSilcJChJTVBMSUJfTkFNRSkubGliDQorQ0MgICAgID0gJChDQ05PREJHKSAkKFJUTElCKQ0KK0NGR1NFVCA9IFRSVUUNCitSRVNPVVJDRSA9ICQoRElST0JKKVxsaWJjdXJsLnJlcw0KKyFFTkRJRg0KKw0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCisjIHJlbGVhc2Utc3NsDQorDQorIUlGICIkKENGRykiID09ICJyZWxlYXNlLXNzbCINCitUQVJHRVQgICA9ICQoTElCX05BTUUpLmxpYg0KK0RJUk9CSiAgID0gJChDRkcpDQorTEZMQUdTU1NMID0gIi9MSUJQQVRIOiQoT1BFTlNTTF9QQVRIKVxvdXQzMiINCitMTksgICAgICA9ICQoTE5LTElCKSAkKExGTEFHU1NTTCkgL291dDokKERJUk9CSilcJChUQVJHRVQpDQorQ0MgICAgICAgPSAkKENDTk9EQkcpICQoUlRMSUIpICQoQ0ZMQUdTU1NMKSAkKENGTEFHU0xJQikNCitDRkdTRVQgICA9IFRSVUUNCishRU5ESUYNCisNCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQorIyByZWxlYXNlLXNzbC1kbGwNCisNCishSUYgIiQoQ0ZHKSIgPT0gInJlbGVhc2Utc3NsLWRsbCINCitUQVJHRVQgICA9ICQoTElCX05BTUUpLmxpYg0KK0RJUk9CSiAgID0gJChDRkcpDQorTEZMQUdTU1NMID0gIi9MSUJQQVRIOiQoT1BFTlNTTF9QQVRIKVxvdXQzMmRsbCINCitMTksgICAgICA9ICQoTE5LTElCKSAkKFdJTkxJQlMpICQoU1NMTElCUykgJChMRkxBR1NTU0wpIC9vdXQ6JChESVJPQkopXCQoVEFSR0VUKQ0KK0NDICAgICAgID0gJChDQ05PREJHKSAkKFJUTElCKSAkKENGTEFHU1NTTCkgJChDRkxBR1NMSUIpDQorQ0ZHU0VUICAgPSBUUlVFDQorIUVORElGDQorDQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KKyMgcmVsZWFzZS1zc2wtemxpYg0KKw0KKyFJRiAiJChDRkcpIiA9PSAicmVsZWFzZS1zc2wtemxpYiINCitUQVJHRVQgICA9ICQoTElCX05BTUUpLmxpYg0KK0RJUk9CSiAgID0gJChDRkcpDQorTEZMQUdTU1NMID0gIi9MSUJQQVRIOiQoT1BFTlNTTF9QQVRIKVxvdXQzMiINCitMRkxBR1NaTElCID0gIi9MSUJQQVRIOiQoWkxJQl9QQVRIKSINCitMTksgICAgICA9ICQoTE5LTElCKSAkKExGTEFHU1NTTCkgJChMRkxBR1NaTElCKSAvb3V0OiQoRElST0JKKVwkKFRBUkdFVCkNCitDQyAgICAgICA9ICQoQ0NOT0RCRykgJChSVExJQikgJChDRkxBR1NTU0wpICQoQ0ZMQUdTWkxJQikgJChDRkxBR1NMSUIpDQorQ0ZHU0VUICAgPSBUUlVFDQorIUVORElGDQorDQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KKyMgcmVsZWFzZS1kbGwtc3NsLWRsbA0KKw0KKyFJRiAiJChDRkcpIiA9PSAicmVsZWFzZS1kbGwtc3NsLWRsbCINCitUQVJHRVQgICA9ICQoTElCX05BTUUpLmRsbA0KK0RJUk9CSiAgID0gJChDRkcpDQorTEZMQUdTU1NMID0gIi9MSUJQQVRIOiQoT1BFTlNTTF9QQVRIKVxvdXQzMmRsbCINCitMTksgICAgICA9ICQoTE5LRExMKSAkKFdJTkxJQlMpICQoU1NMTElCUykgJChMRkxBR1NTU0wpIC9vdXQ6JChESVJPQkopXCQoVEFSR0VUKSAvSU1QTElCOiQoRElST0JKKVwkKElNUExJQl9OQU1FKS5saWINCitDQyAgICAgICA9ICQoQ0NOT0RCRykgJChSVExJQikgJChDRkxBR1NTU0wpDQorQ0ZHU0VUICAgPSBUUlVFDQorUkVTT1VSQ0UgPSAkKERJUk9CSilcbGliY3VybC5yZXMNCishRU5ESUYNCisNCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQorIyByZWxlYXNlLXpsaWItZGxsDQorDQorIUlGICIkKENGRykiID09ICJyZWxlYXNlLXpsaWItZGxsIg0KK1RBUkdFVCAgID0gJChMSUJfTkFNRSkubGliDQorRElST0JKICAgPSAkKENGRykNCitMRkxBR1NaTElCID0gIi9MSUJQQVRIOiQoWkxJQl9QQVRIKSINCitMTksgICAgICA9ICQoTE5LTElCKSAkKFdJTkxJQlMpICQoWkxJQkxJQlNETEwpICQoTEZMQUdTWkxJQikgL291dDokKERJUk9CSilcJChUQVJHRVQpDQorQ0MgICAgICAgPSAkKENDTk9EQkcpICQoUlRMSUIpICQoQ0ZMQUdTWkxJQikgJChDRkxBR1NMSUIpDQorQ0ZHU0VUICAgPSBUUlVFDQorIUVORElGDQorDQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KKyMgcmVsZWFzZS1zc2wtZGxsLXpsaWItZGxsDQorDQorIUlGICIkKENGRykiID09ICJyZWxlYXNlLXNzbC1kbGwtemxpYi1kbGwiDQorVEFSR0VUICAgPSAkKExJQl9OQU1FKS5saWINCitESVJPQkogICA9ICQoQ0ZHKQ0KK0xGTEFHU1pMSUIgPSAiL0xJQlBBVEg6JChaTElCX1BBVEgpIg0KK0xGTEFHU1NTTCA9ICIvTElCUEFUSDokKE9QRU5TU0xfUEFUSClcb3V0MzJkbGwiDQorTE5LICAgICAgPSAkKExOS0xJQikgJChXSU5MSUJTKSAkKFNTTExJQlMpICQoWkxJQkxJQlNETEwpICQoTEZMQUdTU1NMKSAkKExGTEFHU1pMSUIpIC9vdXQ6JChESVJPQkopXCQoVEFSR0VUKQ0KK0NDICAgICAgID0gJChDQ05PREJHKSAkKFJUTElCKSAkKENGTEFHU1NTTCkgJChDRkxBR1NaTElCKSAkKENGTEFHU0xJQikNCitDRkdTRVQgICA9IFRSVUUNCishRU5ESUYNCisNCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQorIyByZWxlYXNlLWRsbC16bGliLWRsbA0KKw0KKyFJRiAiJChDRkcpIiA9PSAicmVsZWFzZS1kbGwtemxpYi1kbGwiDQorVEFSR0VUICAgPSAkKExJQl9OQU1FKS5kbGwNCitESVJPQkogICA9ICQoQ0ZHKQ0KK0xGTEFHU1pMSUIgPSAiL0xJQlBBVEg6JChaTElCX1BBVEgpIg0KK0xOSyAgICAgID0gJChMTktETEwpICQoV0lOTElCUykgJChaTElCTElCU0RMTCkgJChMRkxBR1NaTElCKSAvb3V0OiQoRElST0JKKVwkKFRBUkdFVCkgL0lNUExJQjokKERJUk9CSilcJChJTVBMSUJfTkFNRSkubGliDQorQ0MgICAgICAgPSAkKENDTk9EQkcpICQoUlRMSUIpICQoQ0ZMQUdTWkxJQikNCitDRkdTRVQgICA9IFRSVUUNCitSRVNPVVJDRSA9ICQoRElST0JKKVxsaWJjdXJsLnJlcw0KKyFFTkRJRg0KKw0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCisjIHJlbGVhc2UtZGxsLXNzbC1kbGwtemxpYi1kbGwNCisNCishSUYgIiQoQ0ZHKSIgPT0gInJlbGVhc2UtZGxsLXNzbC1kbGwtemxpYi1kbGwiDQorVEFSR0VUICAgPSAkKExJQl9OQU1FKS5kbGwNCitESVJPQkogICA9ICQoQ0ZHKQ0KK0xGTEFHU1pMSUIgPSAiL0xJQlBBVEg6JChaTElCX1BBVEgpIg0KK0xGTEFHU1NTTCA9ICIvTElCUEFUSDokKE9QRU5TU0xfUEFUSClcb3V0MzJkbGwiDQorTE5LICAgICAgPSAkKExOS0RMTCkgJChXSU5MSUJTKSAkKFNTTExJQlMpICQoWkxJQkxJQlNETEwpICQoTEZMQUdTU1NMKSAkKExGTEFHU1pMSUIpIC9vdXQ6JChESVJPQkopXCQoVEFSR0VUKSAvSU1QTElCOiQoRElST0JKKVwkKElNUExJQl9OQU1FKS5saWINCitDQyAgICAgICA9ICQoQ0NOT0RCRykgJChSVExJQikgJChDRkxBR1NTU0wpICQoQ0ZMQUdTWkxJQikNCitDRkdTRVQgICA9IFRSVUUNCitSRVNPVVJDRSA9ICQoRElST0JKKVxsaWJjdXJsLnJlcw0KKyFFTkRJRg0KKw0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCisjIGRlYnVnDQorDQorIUlGICIkKENGRykiID09ICJkZWJ1ZyINCitUQVJHRVQgPSAkKExJQl9OQU1FX0RFQlVHKS5saWINCitESVJPQkogPSAkKENGRykNCitMTksgICAgPSAkKExOS0xJQikgL291dDokKERJUk9CSilcJChUQVJHRVQpDQorQ0MgICAgID0gJChDQ0RFQlVHKSAkKFJUTElCRCkgJChDRkxBR1NMSUIpDQorQ0ZHU0VUID0gVFJVRQ0KKyFFTkRJRg0KKw0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCisjIGRlYnVnLXNzbA0KKw0KKyFJRiAiJChDRkcpIiA9PSAiZGVidWctc3NsIg0KK1RBUkdFVCAgID0gJChMSUJfTkFNRV9ERUJVRykubGliDQorRElST0JKICAgPSAkKENGRykNCitMRkxBR1NTU0wgPSAiL0xJQlBBVEg6JChPUEVOU1NMX1BBVEgpXG91dDMyIg0KK0xOSyAgICAgID0gJChMTktMSUIpICQoTEZMQUdTU1NMKSAvb3V0OiQoRElST0JKKVwkKFRBUkdFVCkNCitDQyAgICAgICA9ICQoQ0NERUJVRykgJChSVExJQkQpICQoQ0ZMQUdTU1NMKSAkKENGTEFHU0xJQikNCitDRkdTRVQgICA9IFRSVUUNCishRU5ESUYNCisNCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQorIyBkZWJ1Zy16bGliDQorDQorIUlGICIkKENGRykiID09ICJkZWJ1Zy16bGliIg0KK1RBUkdFVCAgID0gJChMSUJfTkFNRV9ERUJVRykubGliDQorRElST0JKICAgPSAkKENGRykNCitMRkxBR1NaTElCID0gIi9MSUJQQVRIOiQoWkxJQl9QQVRIKSINCitMTksgICAgICA9ICQoTE5LTElCKSAkKFpMSUJMSUJTKSAkKExGTEFHU1pMSUIpIC9vdXQ6JChESVJPQkopXCQoVEFSR0VUKQ0KK0NDICAgICAgID0gJChDQ0RFQlVHKSAkKFJUTElCRCkgJChDRkxBR1NaTElCKSAkKENGTEFHU0xJQikNCitDRkdTRVQgICA9IFRSVUUNCishRU5ESUYNCisNCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQorIyBkZWJ1Zy1zc2wtZGxsDQorDQorIUlGICIkKENGRykiID09ICJkZWJ1Zy1zc2wtZGxsIg0KK1RBUkdFVCAgID0gJChMSUJfTkFNRV9ERUJVRykubGliDQorRElST0JKICAgPSAkKENGRykNCitMRkxBR1NTU0wgPSAvTElCUEFUSDokKE9QRU5TU0xfUEFUSClcb3V0MzJkbGwNCitMTksgICAgICA9ICQoTE5LTElCKSAkKFdJTkxJQlMpICQoU1NMTElCUykgJChMRkxBR1NTU0wpIC9vdXQ6JChESVJPQkopXCQoVEFSR0VUKQ0KK0NDICAgICAgID0gJChDQ0RFQlVHKSAkKFJUTElCRCkgJChDRkxBR1NTU0wpICQoQ0ZMQUdTTElCKQ0KK0NGR1NFVCAgID0gVFJVRQ0KKyFFTkRJRg0KKw0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCisjIGRlYnVnLXNzbC16bGliDQorDQorIUlGICIkKENGRykiID09ICJkZWJ1Zy1zc2wtemxpYiINCitUQVJHRVQgICA9ICQoTElCX05BTUVfREVCVUcpLmxpYg0KK0RJUk9CSiAgID0gJChDRkcpDQorTEZMQUdTWkxJQiA9ICIvTElCUEFUSDokKFpMSUJfUEFUSCkiDQorTEZMQUdTU1NMID0gIi9MSUJQQVRIOiQoT1BFTlNTTF9QQVRIKVxvdXQzMiINCitMTksgICAgICA9ICQoTE5LTElCKSAkKFpMSUJMSUJTKSAkKExGTEFHU1NTTCkgJChMRkxBR1NaTElCKSAvb3V0OiQoRElST0JKKVwkKFRBUkdFVCkNCitDQyAgICAgICA9ICQoQ0NERUJVRykgJChSVExJQkQpICQoQ0ZMQUdTU1NMKSAkKENGTEFHU1pMSUIpICQoQ0ZMQUdTTElCKQ0KK0NGR1NFVCAgID0gVFJVRQ0KKyFFTkRJRg0KKw0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCisjIGRlYnVnLXpsaWItZGxsDQorDQorIUlGICIkKENGRykiID09ICJkZWJ1Zy16bGliLWRsbCINCitUQVJHRVQgICA9ICQoTElCX05BTUVfREVCVUcpLmxpYg0KK0RJUk9CSiAgID0gJChDRkcpDQorTEZMQUdTWkxJQiA9ICIvTElCUEFUSDokKFpMSUJfUEFUSCkiDQorTE5LICAgICAgPSAkKExOS0xJQikgJChXSU5MSUJTKSAkKFpMSUJMSUJTRExMKSAkKExGTEFHU1pMSUIpIC9vdXQ6JChESVJPQkopXCQoVEFSR0VUKQ0KK0NDICAgICAgID0gJChDQ0RFQlVHKSAkKFJUTElCRCkgJChDRkxBR1NaTElCKSAkKENGTEFHU0xJQikNCitDRkdTRVQgICA9IFRSVUUNCishRU5ESUYNCisNCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQorIyBkZWJ1Zy1zc2wtZGxsLXpsaWItZGxsDQorDQorIUlGICIkKENGRykiID09ICJkZWJ1Zy1zc2wtZGxsLXpsaWItZGxsIg0KK1RBUkdFVCAgID0gJChMSUJfTkFNRV9ERUJVRykubGliDQorRElST0JKICAgPSAkKENGRykNCitMRkxBR1NaTElCID0gIi9MSUJQQVRIOiQoWkxJQl9QQVRIKSINCitMRkxBR1NTU0wgPSAiL0xJQlBBVEg6JChPUEVOU1NMX1BBVEgpXG91dDMyZGxsIg0KK0xOSyAgICAgID0gJChMTktMSUIpICQoV0lOTElCUykgJChTU0xMSUJTKSAkKFpMSUJMSUJTRExMKSAkKExGTEFHU1NTTCkgJChMRkxBR1NaTElCKSAvb3V0OiQoRElST0JKKVwkKFRBUkdFVCkNCitDQyAgICAgICA9ICQoQ0NERUJVRykgJChSVExJQkQpICQoQ0ZMQUdTU1NMKSAkKENGTEFHU1pMSUIpICQoQ0ZMQUdTTElCKQ0KK0NGR1NFVCAgID0gVFJVRQ0KKyFFTkRJRg0KKw0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCisjIGRlYnVnLWRsbA0KKw0KKyFJRiAiJChDRkcpIiA9PSAiZGVidWctZGxsIg0KK1RBUkdFVCA9ICQoTElCX05BTUVfREVCVUcpLmRsbA0KK0RJUk9CSiA9ICQoQ0ZHKQ0KK0xOSyAgICA9ICQoTE5LRExMKSAkKFdJTkxJQlMpIC9ERUJVRyAvb3V0OiQoRElST0JKKVwkKFRBUkdFVCkgL0lNUExJQjokKERJUk9CSilcJChJTVBMSUJfTkFNRV9ERUJVRykubGliIC9QREI6JChESVJPQkopXCQoSU1QTElCX05BTUVfREVCVUcpLnBkYg0KK0NDICAgICA9ICQoQ0NERUJVRykgJChSVExJQkQpIA0KK0NGR1NFVCA9IFRSVUUNCitSRVNPVVJDRSA9ICQoRElST0JKKVxsaWJjdXJsLnJlcw0KKyFFTkRJRg0KKw0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCisjIGRlYnVnLWRsbC1zc2wtZGxsDQorDQorIUlGICIkKENGRykiID09ICJkZWJ1Zy1kbGwtc3NsLWRsbCINCitUQVJHRVQgICA9ICQoTElCX05BTUVfREVCVUcpLmRsbA0KK0RJUk9CSiAgID0gJChDRkcpDQorTEZMQUdTU1NMID0gIi9MSUJQQVRIOiQoT1BFTlNTTF9QQVRIKVxvdXQzMmRsbCINCitMTksgICAgICA9ICQoTE5LRExMKSAkKFdJTkxJQlMpICQoU1NMTElCUykgJChMRkxBR1NTU0wpIC9ERUJVRyAvb3V0OiQoRElST0JKKVwkKFRBUkdFVCkgL0lNUExJQjokKERJUk9CSilcJChJTVBMSUJfTkFNRV9ERUJVRykubGliIC9QREI6JChESVJPQkopXCQoSU1QTElCX05BTUVfREVCVUcpLnBkYg0KK0NDICAgICAgID0gJChDQ0RFQlVHKSAkKFJUTElCRCkgJChDRkxBR1NTU0wpDQorQ0ZHU0VUICAgPSBUUlVFDQorUkVTT1VSQ0UgPSAkKERJUk9CSilcbGliY3VybC5yZXMNCishRU5ESUYNCisNCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQorIyBkZWJ1Zy1kbGwtemxpYi1kbGwNCisNCishSUYgIiQoQ0ZHKSIgPT0gImRlYnVnLWRsbC16bGliLWRsbCINCitUQVJHRVQgICA9ICQoTElCX05BTUVfREVCVUcpLmRsbA0KK0RJUk9CSiAgID0gJChDRkcpDQorTEZMQUdTWkxJQiA9ICIvTElCUEFUSDokKFpMSUJfUEFUSCkiDQorTE5LICAgICAgPSAkKExOS0RMTCkgJChXSU5MSUJTKSAkKFpMSUJMSUJTRExMKSAkKExGTEFHU1pMSUIpIC9ERUJVRyAvb3V0OiQoRElST0JKKVwkKFRBUkdFVCkgL0lNUExJQjokKERJUk9CSilcJChJTVBMSUJfTkFNRV9ERUJVRykubGliIC9QREI6JChESVJPQkopXCQoSU1QTElCX05BTUVfREVCVUcpLnBkYg0KK0NDICAgICAgID0gJChDQ0RFQlVHKSAkKFJUTElCRCkgJChDRkxBR1NaTElCKQ0KK0NGR1NFVCAgID0gVFJVRQ0KK1JFU09VUkNFID0gJChESVJPQkopXGxpYmN1cmwucmVzDQorIUVORElGDQorDQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KKyMgZGVidWctZGxsLXNzbC1kbGwtemxpYi1kbGwNCisNCishSUYgIiQoQ0ZHKSIgPT0gImRlYnVnLWRsbC1zc2wtZGxsLXpsaWItZGxsIg0KK1RBUkdFVCAgID0gJChMSUJfTkFNRV9ERUJVRykuZGxsDQorRElST0JKICAgPSAkKENGRykNCitMRkxBR1NaTElCID0gIi9MSUJQQVRIOiQoWkxJQl9QQVRIKSINCitMRkxBR1NTU0wgPSAiL0xJQlBBVEg6JChPUEVOU1NMX1BBVEgpXG91dDMyZGxsIg0KK0xOSyAgICAgID0gJChMTktETEwpICQoV0lOTElCUykgJChTU0xMSUJTKSAkKFpMSUJMSUJTRExMKSAkKExGTEFHU1NTTCkgJChMRkxBR1NaTElCKSAvREVCVUcgL291dDokKERJUk9CSilcJChUQVJHRVQpIC9JTVBMSUI6JChESVJPQkopXCQoSU1QTElCX05BTUVfREVCVUcpLmxpYiAvUERCOiQoRElST0JKKVwkKElNUExJQl9OQU1FX0RFQlVHKS5wZGINCitDQyAgICAgICA9ICQoQ0NERUJVRykgJChSVExJQkQpICQoQ0ZMQUdTU1NMKSAkKENGTEFHU1pMSUIpDQorQ0ZHU0VUICAgPSBUUlVFDQorUkVTT1VSQ0UgPSAkKERJUk9CSilcbGliY3VybC5yZXMNCishRU5ESUYNCisNCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KKyMgVXNhZ2UNCisjDQorIUlGICIkKENGR1NFVCkiID09ICJGQUxTRSIgJiYgIiQoQ0ZHKSIgIT0gIiINCishTUVTU0FHRSBVc2FnZTogbm1ha2UgL2YgbWFrZWZpbGUudmM5IENGRz08Y29uZmlnPiA8dGFyZ2V0Pg0KKyFNRVNTQUdFIHdoZXJlIDxjb25maWc+IGlzIG9uZSBvZjoNCishTUVTU0FHRSAgIHJlbGVhc2UgICAgICAgICAgICAgICAgICAgICAgLSByZWxlYXNlIHN0YXRpYyBsaWJyYXJ5DQorIU1FU1NBR0UgICByZWxlYXNlLXNzbCAgICAgICAgICAgICAgICAgIC0gcmVsZWFzZSBzdGF0aWMgbGlicmFyeSB3aXRoIHNzbA0KKyFNRVNTQUdFICAgcmVsZWFzZS16bGliICAgICAgICAgICAgICAgICAtIHJlbGVhc2Ugc3RhdGljIGxpYnJhcnkgd2l0aCB6bGliDQorIU1FU1NBR0UgICByZWxlYXNlLXNzbC16bGliICAgICAgICAgICAgIC0gcmVsZWFzZSBzdGF0aWMgbGlicmFyeSB3aXRoIHNzbCBhbmQgemxpYg0KKyFNRVNTQUdFICAgcmVsZWFzZS1zc2wtZGxsICAgICAgICAgICAgICAtIHJlbGVhc2Ugc3RhdGljIGxpYnJhcnkgd2l0aCBkeW5hbWljIHNzbA0KKyFNRVNTQUdFICAgcmVsZWFzZS16bGliLWRsbCAgICAgICAgICAgICAtIHJlbGVhc2Ugc3RhdGljIGxpYnJhcnkgd2l0aCBkeW5hbWljIHpsaWINCishTUVTU0FHRSAgIHJlbGVhc2Utc3NsLWRsbC16bGliLWRsbCAgICAgLSByZWxlYXNlIHN0YXRpYyBsaWJyYXJ5IHdpdGggZHluYW1pYyBzc2wgYW5kIGR5bmFtaWMgemxpYg0KKyFNRVNTQUdFICAgcmVsZWFzZS1kbGwgICAgICAgICAgICAgICAgICAtIHJlbGVhc2UgZHluYW1pYyBsaWJyYXJ5DQorIU1FU1NBR0UgICByZWxlYXNlLWRsbC1zc2wtZGxsICAgICAgICAgIC0gcmVsZWFzZSBkeW5hbWljIGxpYnJhcnkgd2l0aCBkeW5hbWljIHNzbA0KKyFNRVNTQUdFICAgcmVsZWFzZS1kbGwtemxpYi1kbGwgICAgICAgICAtIHJlbGVhc2UgZHluYW1pYyBsaWJyYXJ5IHdpdGggZHluYW1pYyB6bGliDQorIU1FU1NBR0UgICByZWxlYXNlLWRsbC1zc2wtZGxsLXpsaWItZGxsIC0gcmVsZWFzZSBkeW5hbWljIGxpYnJhcnkgd2l0aCBkeW5hbWljIHNzbCBhbmQgZHluYW1pYyB6bGliDQorIU1FU1NBR0UgICBkZWJ1ZyAgICAgICAgICAgICAgICAgICAgICAgIC0gZGVidWcgc3RhdGljIGxpYnJhcnkNCishTUVTU0FHRSAgIGRlYnVnLXNzbCAgICAgICAgICAgICAgICAgICAgLSBkZWJ1ZyBzdGF0aWMgbGlicmFyeSB3aXRoIHNzbA0KKyFNRVNTQUdFICAgZGVidWctemxpYiAgICAgICAgICAgICAgICAgICAtIGRlYnVnIHN0YXRpYyBsaWJyYXJ5IHdpdGggemxpYg0KKyFNRVNTQUdFICAgZGVidWctc3NsLXpsaWIgICAgICAgICAgICAgICAtIGRlYnVnIHN0YXRpYyBsaWJyYXJ5IHdpdGggc3NsIGFuZCB6bGliDQorIU1FU1NBR0UgICBkZWJ1Zy1zc2wtZGxsICAgICAgICAgICAgICAgIC0gZGVidWcgc3RhdGljIGxpYnJhcnkgd2l0aCBkeW5hbWljIHNzbA0KKyFNRVNTQUdFICAgZGVidWctemxpYi1kbGwgICAgICAgICAgICAgICAtIGRlYnVnIHN0YXRpYyBsaWJyYXJ5IHdpdGggZHluYW1pYyB6bGliDQorIU1FU1NBR0UgICBkZWJ1Zy1zc2wtZGxsLXpsaWItZGxsICAgICAgIC0gZGVidWcgc3RhdGljIGxpYnJhcnkgd2l0aCBkeW5hbWljIHNzbCBhbmQgZHluYW1pYyB6bGliDQorIU1FU1NBR0UgICBkZWJ1Zy1kbGwgICAgICAgICAgICAgICAgICAgIC0gZGVidWcgZHluYW1pYyBsaWJyYXJ5DQorIU1FU1NBR0UgICBkZWJ1Zy1kbGwtc3NsLWRsbCAgICAgICAgICAgIC0gZGVidWcgZHluYW1pYyBsaWJyYXJ5IHdpdGggZHluYW1pYyBzc2wNCishTUVTU0FHRSAgIGRlYnVnLWRsbC16bGliLWRsbCAgICAgICAgICAgLSBkZWJ1ZyBkeW5hbWljIGxpYnJhcnkgd2l0aCBkeW5hbWljIHpsaWIxDQorIU1FU1NBR0UgICBkZWJ1Zy1kbGwtc3NsLWRsbC16bGliLWRsbCAgIC0gZGVidWcgZHluYW1pYyBsaWJyYXJ5IHdpdGggZHluYW1pYyBzc2wgYW5kIGR5bmFtaWMgemxpYg0KKyFNRVNTQUdFIDx0YXJnZXQ+IGNhbiBiZSBsZWZ0IGJsYW5rIGluIHdoaWNoIGNhc2UgYWxsIGlzIGFzc3VtZWQNCishRVJST1IgcGxlYXNlIGNob29zZSBhIHZhbGlkIGNvbmZpZ3VyYXRpb24gIiQoQ0ZHKSINCishRU5ESUYNCisNCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KKyMgT25seSB0aGUgY2xlYW4gdGFyZ2V0IGNhbiBiZSB1c2VkIGlmIGEgY29uZmlnIHdhcyBub3QgcHJvdmlkZWQuDQorIw0KKyFJRiAiJChDRkdTRVQpIiA9PSAiRkFMU0UiDQorY2xlYW46DQorCUAtZXJhc2UgL3MgKi5kbGwgMj4gTlVMDQorCUAtZXJhc2UgL3MgKi5leHAgMj4gTlVMDQorCUAtZXJhc2UgL3MgKi5pZGIgMj4gTlVMDQorCUAtZXJhc2UgL3MgKi5saWIgMj4gTlVMDQorCUAtZXJhc2UgL3MgKi5vYmogMj4gTlVMDQorCUAtZXJhc2UgL3MgKi5wY2ggMj4gTlVMDQorCUAtZXJhc2UgL3MgKi5wZGIgMj4gTlVMDQorCUAtZXJhc2UgL3MgKi5yZXMgMj4gTlVMDQorIUVMU0UNCisjIEEgY29uZmlnIHdhcyBwcm92aWRlZCwgc28gdGhlIGxpYnJhcnkgY2FuIGJlIGJ1aWx0Lg0KKyMNCitYX09CSlM9IFwNCisJJChESVJPQkopXGJhc2U2NC5vYmogXA0KKwkkKERJUk9CSilcY29ubmVjdC5vYmogXA0KKwkkKERJUk9CSilcY29udGVudF9lbmNvZGluZy5vYmogXA0KKwkkKERJUk9CSilcY29va2llLm9iaiBcDQorCSQoRElST0JKKVxjdXJsX2FkZHJpbmZvLm9iaiBcDQorCSQoRElST0JKKVxjdXJsX2ZubWF0Y2gub2JqIFwNCisJJChESVJPQkopXGN1cmxfZ2V0aG9zdG5hbWUub2JqIFwNCisJJChESVJPQkopXGN1cmxfbWVtcmNoci5vYmogXA0KKwkkKERJUk9CSilcY3VybF9yYW5kLm9iaiBcDQorCSQoRElST0JKKVxjdXJsX3J0bXAub2JqIFwNCisJJChESVJPQkopXGN1cmxfc3NwaS5vYmogXA0KKwkkKERJUk9CSilcY3VybF90aHJlYWRzLm9iaiBcDQorCSQoRElST0JKKVxkaWN0Lm9iaiBcDQorCSQoRElST0JKKVxlYXN5Lm9iaiBcDQorCSQoRElST0JKKVxlc2NhcGUub2JqIFwNCisJJChESVJPQkopXGZpbGVpbmZvLm9iaiBcDQorCSQoRElST0JKKVxmaWxlLm9iaiBcDQorCSQoRElST0JKKVxmb3JtZGF0YS5vYmogXA0KKwkkKERJUk9CSilcZnRwbGlzdHBhcnNlci5vYmogXA0KKwkkKERJUk9CSilcZnRwLm9iaiBcDQorCSQoRElST0JKKVxnZXRlbnYub2JqIFwNCisJJChESVJPQkopXGdldGluZm8ub2JqIFwNCisJJChESVJPQkopXGd0bHMub2JqIFwNCisJJChESVJPQkopXGdvcGhlci5vYmogXA0KKwkkKERJUk9CSilcaGFzaC5vYmogXA0KKwkkKERJUk9CSilcaG1hYy5vYmogXA0KKwkkKERJUk9CSilcaG9zdGFyZXMub2JqIFwNCisJJChESVJPQkopXGhvc3Rhc3luLm9iaiBcDQorCSQoRElST0JKKVxob3N0aXA0Lm9iaiBcDQorCSQoRElST0JKKVxob3N0aXA2Lm9iaiBcDQorCSQoRElST0JKKVxob3N0aXAub2JqIFwNCisJJChESVJPQkopXGhvc3RzeW4ub2JqIFwNCisJJChESVJPQkopXGhvc3R0aHJlLm9iaiBcDQorCSQoRElST0JKKVxodHRwX2NodW5rcy5vYmogXA0KKwkkKERJUk9CSilcaHR0cF9kaWdlc3Qub2JqIFwNCisJJChESVJPQkopXGh0dHBfbmVnb3RpYXRlLm9iaiBcDQorCSQoRElST0JKKVxodHRwX250bG0ub2JqIFwNCisJJChESVJPQkopXGh0dHAub2JqIFwNCisJJChESVJPQkopXGlmMmlwLm9iaiBcDQorCSQoRElST0JKKVxpbWFwLm9iaiBcDQorCSQoRElST0JKKVxpbmV0X250b3Aub2JqIFwNCisJJChESVJPQkopXGluZXRfcHRvbi5vYmogXA0KKwkkKERJUk9CSilcbGRhcC5vYmogXA0KKwkkKERJUk9CSilcbGxpc3Qub2JqIFwNCisJJChESVJPQkopXG1kNC5vYmogXA0KKwkkKERJUk9CSilcbWQ1Lm9iaiBcDQorCSQoRElST0JKKVxtZW1kZWJ1Zy5vYmogXA0KKwkkKERJUk9CSilcbXByaW50Zi5vYmogXA0KKwkkKERJUk9CSilcbXVsdGkub2JqIFwNCisJJChESVJPQkopXG5ldHJjLm9iaiBcDQorICAgICAgICAkKERJUk9CSilcbm9uYmxvY2sub2JqIFwNCisJJChESVJPQkopXG9wZW5sZGFwLm9iaiBcDQorCSQoRElST0JKKVxwYXJzZWRhdGUub2JqIFwNCisJJChESVJPQkopXHBpbmdwb25nLm9iaiBcDQorCSQoRElST0JKKVxwb2xhcnNzbC5vYmogXA0KKwkkKERJUk9CSilccG9wMy5vYmogXA0KKwkkKERJUk9CSilccHJvZ3Jlc3Mub2JqIFwNCisJJChESVJPQkopXHJhd3N0ci5vYmogXA0KKwkkKERJUk9CSilccnRzcC5vYmogXA0KKwkkKERJUk9CSilcc2VsZWN0Lm9iaiBcDQorCSQoRElST0JKKVxzZW5kZi5vYmogXA0KKwkkKERJUk9CSilcc2hhcmUub2JqIFwNCisJJChESVJPQkopXHNsaXN0Lm9iaiBcDQorCSQoRElST0JKKVxzbXRwLm9iaiBcDQorCSQoRElST0JKKVxzb2Nrc19nc3NhcGkub2JqIFwNCisJJChESVJPQkopXHNvY2tzLm9iaiBcDQorCSQoRElST0JKKVxzb2Nrc19zc3BpLm9iaiBcDQorCSQoRElST0JKKVxzcGVlZGNoZWNrLm9iaiBcDQorCSQoRElST0JKKVxzcGxheS5vYmogXA0KKwkkKERJUk9CSilcc3NoLm9iaiBcDQorCSQoRElST0JKKVxzc2xnZW4ub2JqIFwNCisJJChESVJPQkopXHNzbHVzZS5vYmogXA0KKwkkKERJUk9CSilcc3RyZXF1YWwub2JqIFwNCisJJChESVJPQkopXHN0cmVycm9yLm9iaiBcDQorCSQoRElST0JKKVxzdHJ0b2sub2JqIFwNCisJJChESVJPQkopXHN0cnRvb2ZmdC5vYmogXA0KKwkkKERJUk9CSilcdGVsbmV0Lm9iaiBcDQorCSQoRElST0JKKVx0ZnRwLm9iaiBcDQorCSQoRElST0JKKVx0aW1ldmFsLm9iaiBcDQorCSQoRElST0JKKVx0cmFuc2Zlci5vYmogXA0KKwkkKERJUk9CSilcdXJsLm9iaiBcDQorCSQoRElST0JKKVx2ZXJzaW9uLm9iaiBcDQorCSQoRElST0JKKVx3YXJubGVzcy5vYmogXA0KKwkkKERJUk9CSilcd2lsZGNhcmQub2JqIFwNCisJJChSRVNPVVJDRSkNCisNCithbGwgOiAkKFRBUkdFVCkNCisNCiskKFRBUkdFVCk6ICQoWF9PQkpTKQ0KKwkkKExOSykgJChMRkxBR1MpICQoWF9PQkpTKQ0KKwkteGNvcHkgJChESVJPQkopXCQoTElCX05BTUUpLmRsbCAgICAgICAuIC95DQorCS14Y29weSAkKERJUk9CSilcJChMSUJfTkFNRSkubGliICAgICAgIC4gL3kNCisJLXhjb3B5ICQoRElST0JKKVwkKExJQl9OQU1FX0RFQlVHKS5kbGwgLiAveQ0KKwkteGNvcHkgJChESVJPQkopXCQoTElCX05BTUVfREVCVUcpLmxpYiAuIC95DQorCS14Y29weSAkKERJUk9CSilcJChJTVBMSUJfTkFNRSkubGliICAgIC4gL3kNCisJLXhjb3B5ICQoRElST0JKKVwkKElNUExJQl9OQU1FX0RFQlVHKS5saWIgLiAveQ0KKwkteGNvcHkgJChESVJPQkopXCouZXhwICAgICAgICAgICAgICAgICAuIC95DQorCS14Y29weSAkKERJUk9CSilcKi5wZGIgICAgICAgICAgICAgICAgIC4gL3kNCisNCiskKFhfT0JKUyk6ICQoRElST0JKKQ0KKw0KKyQoRElST0JKKToNCisJQGlmIG5vdCBleGlzdCAiJChESVJPQkopIiBta2RpciAkKERJUk9CSikNCisNCisuU1VGRklYRVM6IC5jIC5vYmogLnJlcw0KKw0KK3suXH0uY3skKERJUk9CSilcfS5vYmo6DQorCSQoQ0MpICQoQ0ZMQUdTKSAvRm8iJEAiICAkPA0KKw0KK2RlYnVnLWRsbFxsaWJjdXJsLnJlcyBcDQorZGVidWctZGxsLXNzbC1kbGxcbGliY3VybC5yZXMgXA0KK2RlYnVnLWRsbC16bGliLWRsbFxsaWJjdXJsLnJlcyBcDQorZGVidWctZGxsLXNzbC1kbGwtemxpYi1kbGxcbGliY3VybC5yZXM6IGxpYmN1cmwucmMNCisJcmMgL2RERUJVR0JVSUxEPTEgL0ZvICRAIGxpYmN1cmwucmMNCisNCityZWxlYXNlLWRsbFxsaWJjdXJsLnJlcyBcDQorcmVsZWFzZS1kbGwtc3NsLWRsbFxsaWJjdXJsLnJlcyBcDQorcmVsZWFzZS1kbGwtemxpYi1kbGxcbGliY3VybC5yZXMgXA0KK3JlbGVhc2UtZGxsLXNzbC1kbGwtemxpYi1kbGxcbGliY3VybC5yZXM6IGxpYmN1cmwucmMNCisJcmMgL2RERUJVR0JVSUxEPTAgL0ZvICRAIGxpYmN1cmwucmMNCishRU5ESUYgICMgRW5kIG9mIGNhc2Ugd2hlcmUgYSBjb25maWcgd2FzIHByb3ZpZGVkLg0KZGlmZiAtLWdpdCBhL2xpYi9NYWtlZmlsZS52eHdvcmtzIGIvbGliL01ha2VmaWxlLnZ4d29ya3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzk2ZDE2MAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9NYWtlZmlsZS52eHdvcmtzCkBAIC0wLDAgKzEsMTc3IEBACisjKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMKKyMKKyNGaWxlbmFtZSAgIDogTWFrZWZpbGUudnh3b3JrcworI0Rlc2NyaXB0aW9uOiBtYWtlZmlsZSB0byBiZSB1c2VkIGluIG9yZGVyIHRvIGNvbXBpbGUgbGliY3VybCBmb3IgVnhXb29ya3MgNi4zLgorIworI0hvdyB0byB1c2U6CisjICAgICAgICAgICAgIDEuIEFkanVzdCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgYXQgdGhlIGZpbGUgYmVnaW5pbmcKKyMgICAgICAgICAgICAgMi4gT3BlbiB0aGUgQ29tbWFuZCBQcm9tcHQgd2luZG93IGFuZCBjaGFuZ2UgZGlyZWN0b3J5ICgnY2QnKQorIyAgICAgICAgICAgICAgICBpbnRvIHRoZSAnbGliJyBmb2xkZXIKKyMgICAgICAgICAgICAgMy4gQWRkIDxDWUdXSU4+L2JpbiBmb2xkZXIgdG8gdGhlIFBBVEggZW52aXJvbm1lbnQgdmFyaWFibGUKKyMgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUgdHlwZSAnc2V0IFBBVEg9QzovZW1iZWRkZWQvY3lnd2luL2JpbjslUEFUSCUnCisjICAgICAgICAgICAgIDQuIEJ1aWxkIHRoZSBsaWJyYXJ5IGJ5IHR5cGluZyAnbWFrZSAtZiAuL01ha2VmaWxlLnZ4d29ya3MnCisjICAgICAgICAgICAgIEFzIGEgcmVzdWx0IHRoZSBsaWJjdXJsLmEgc2hvdWxkIGJlIGNyZWF0ZWQgaW4gdGhlICdsaWInIGZvbGRlci4KKyMgICAgICAgICAgICAgVG8gY2xlYW4gcGFja2FnZSB1c2UgJ21ha2UgLWYgLi9NYWtlZmlsZS52eHdvcmtzIGNsZWFuJworI1JlcXVpcmVtZW50czoKKyMgICAgICAgICAgICAgMS4gV2luWFAgbWFjaGluZQorIyAgICAgICAgICAgICAyLiBGdWxsIENZR1dJTiBpbnN0YWxsYXRpb24gKG9wZW4gc291cmNlKSB3aXRoIEdOVSBtYWtlIHZlcnNpb24KKyMgICAgICAgICAgICAgICAgdjMuNzggb3IgaGlnaGVyCisjICAgICAgICAgICAgIDMuIFdpbmRSaXZlciBXb3JrYmVuY2ggd2l0aCB2eFdvcmtzIDYuMyAoY29tbWVyY2lhbCkKKyMqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRW52aXJvbm1lbnQKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitleHBvcnQgV0lORF9IT01FIDo9IEM6L2VtYmVkZGVkL1dvcmtiZW5jaDIuNS4wLjEKK2V4cG9ydCBXSU5EX0JBU0UgOj0gJChXSU5EX0hPTUUpL3Z4d29ya3MtNi4zCitleHBvcnQgV0lORF9IT1NUX1RZUEUgOj0geDg2LXdpbjMyCisKKyMgQlVJTERfVFlFOj0gPGRlYnVnPnw8cmVsZWFzZT4gKGJ1aWxkIHdpdGggZGVidWdnaW5nIGluZm8gb3Igb3B0aW1pemVkKQorQlVJTERfVFlQRSA6PSBkZWJ1ZworVVNFUl9DRkxBR1M6PQorCisjIGRpcmVjdG9yaWVzIHdoZXJlIHRvIHNlZWsgZm9yIGluY2x1ZGVzIGFuZCBsaWJyYXJpZXMKK09QRU5TU0xfSU5DIDo9IEQ6L2xpYnJhcmllcy9vcGVuc3NsL29wZW5zc2wtMC45LjhhLXZ4V29ya3M2LjMvaW5jbHVkZQorT1BFTlNTTF9MSUIgOj0gRDovbGlicmFyaWVzL29wZW5zc2wvb3BlbnNzbC0wLjkuOGEtdnhXb3JrczYuMworWkxJQl9JTkMgICAgOj0gRDovbGlicmFyaWVzL3psaWIvemxpYi0xLjIuMy1WeFdvcmtzNi4zL3psaWItMS4yLjMKK1pMSUJfTElCICAgIDo9IEQ6L2xpYnJhcmllcy96bGliL3psaWItMS4yLjMtVnhXb3JrczYuMy9iaW5hcmllcy92eHdvcmtzXzMuMV9nbnUvRGVidWcvbGliCitBUkVTX0lOQyAgICA6PQorQVJFU19MSUIgICAgOj0KKworCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ29tcGlsZXIKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitDQyA6PSBjY3BwYworQVIgOj0gYXJwcGMKK0xJTksgOj0gY2NwcGMKK0NGTEFHUyA6PSAtRF9fR05VQ19fIC1EX19wcGNfXyAtbXNvZnQtZmxvYXQgLWZuby1idWlsdGluIC1tY3B1PTYwNCAtbWxvbmdjYWxsIC1EQ1BVPVBQQzYwNCAtRF9HTlVfVE9PTCAtV2FsbCAtVyAtV2lubGluZSAkKFVTRVJfQ0ZMQUdTKQorTERGTEFHUyA6PSAtbm9zdGRsaWIgLVdsLC1pIC1XbCwtWAorSU5DTFVERV9GTEFHIDo9IC1JCitDX0RFQlVHRkxBRyA6PSAtZworQ19PUFRGTEFHIDo9IC1PMgorQ09NUElMRV9PTkxZX0ZMQUcgOj0gLWMKK09CSl9FWFRFTlNJT04gOj0gLm8KK0NDX09CSl9PVVRQVVQgPSAtbyAkQAorQVJGTEFHUyA6PSAtcmMKK0xJQlNfRkxBRyA6PSAtbAorTElCU19ESVJGTEFHOj0gLUwKK0xEX0RFQlVHRkxBRyA6PSAkKENfREVCVUdGTEFHKQorRVhFQ1VURV9FWFRFTlNJT04gOj0gLm91dAorVE9PTF9DSEFJTl9CSU4gOj0gJChXSU5EX0hPTUUpL2dudS8zLjQuNC12eHdvcmtzLTYuMy8kKFdJTkRfSE9TVF9UWVBFKS9iaW4vCisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjIEFkZCAtRElORVQ2IGlmIHRoZSBPUyBrZXJuZWwgaW1hZ2Ugd2FzIGJ1aWx0IHdpdGggSVB2NiBzdXBwb3J0CisjIENGTEFHUyArPSAtRElORVQ2CisKKyMgU2V0IHVwIGNvbXBpbGVyIGFuZCBsaW5rZXIgZmxhZ3MgZm9yIGRlYnVnIG9yIG9wdGltaXphdGlvbgoraWZlcSAoJChCVUlMRF9UWVBFKSwgZGVidWcpCitDRkxBR1MgKz0gJChDX0RFQlVHRkxBRykKK0xERkxBR1MgKz0gJChMRF9ERUJVR0ZMQUcpCitlbHNlCitDRkxBR1MgKz0gJChDX09QVEZMQUcpCitlbmRpZgorCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworIyBNYWluIE1ha2VmaWxlIGFuZCBwb3NzaWJsZSBzdWItbWFrZSBmaWxlcworTUFLRUZJTEVTIDo9IE1ha2VmaWxlLnZ4d29ya3MKKworIyBMaXN0IG9mIGV4dGVybmFsIGluY2x1ZGUgZGlyZWN0b3JpZXMKKyMtLS0tLQorIyBJTVBPUlRBTlQ6IGluY2x1ZGUgT1BFTlNTTCBkaXJlY3RvcmllcyBiZWZvcmUgc3lzdGVtCisjICAgICAgICAgICAgaW4gb3JkZXIgdG8gcHJldmVudCBXaW5kUml2ZXIgT3BlblNTTCB0byBiZSB1c2VkLgorIy0tLS0tCitJTkNMVURFX0RJUlMgOj0gLi4vaW5jbHVkZSAkKE9QRU5TU0xfSU5DKSAkKFpMSUJfSU5DKSAkKEFSRVNfSU5DKSAkKFdJTkRfQkFTRSkvdGFyZ2V0L2ggJChXSU5EX0JBU0UpL3RhcmdldC9oL3dybi9jb3JlaXAKKworIyBMaXN0IG9mIGV4dGVybmFsIGxpYnJhcmllcyBhbmQgdGhlaXIgZGlyZWN0b3JpZXMKK0xJQlNfTElTVCA6PSAuCitMSUJfRElSUyAgOj0gLgoraWZuZXEgKCQoT1BFTlNTTF9MSUIpLCApCitMSUJTX0xJU1QgKz0gY3J5cHRvIHNzbAorTElCX0RJUlMgICs9ICQoT1BFTlNTTF9MSUIpCitlbmRpZgoraWZuZXEgKCQoWkxJQl9MSUIpLCApCitMSUJTX0xJU1QgKz0gegorTElCX0RJUlMgICs9ICQoWkxJQl9MSUIpCitlbmRpZgoraWZuZXEgKCQoQVJFU19MSUIpLCApCitMSUJTX0xJU1QgKz0gYXJlcworTElCX0RJUlMgICs9ICQoQVJFU19MSUIpCitlbmRpZgorCisjIEFkZCBpbmNsdWRlIGFuZCBsaWJyYXJ5IGRpcmVjdG9yaWVzIGFuZCBsaWJyYXJpZXMKK0NGTEFHUyArPSAkKElOQ0xVREVfRElSUzolPSQoSU5DTFVERV9GTEFHKSUpCitMREZMQUdTICs9ICQoTElCX0RJUlM6JT0kKExJQlNfRElSRkxBRyklKQorCisjIExpc3Qgb2YgdGFyZ2V0cyB0byBtYWtlIGZvciBsaWJzIHRhcmdldAorTElCU19UQVJHRVRfTElTVCA6PSBsaWJjdXJsLmEKKworIyBMaXN0IG9mIGV4ZWN1YXRibGUgYXBwbGljYXRpb25zIHRvIG1ha2UgaW4gYWRkaXRpb24gdG8gbGlicyBmb3IgYWxsIHRhcmdldAorRVhFX1RBUkdFVF9MSVNUIDo9CisKKyMgU3VwcG9ydCBmb3IgZWNob2luZyBydWxlcworIyBJZiBFQ0hPUlVMRVMgdmFyaWFibGUgd2FzIHNldCAoZm9yIGV4YW1wbGUsIHVzaW5nICdtYWtlJyBjb21tYW5kIGxpbmUpCisjICBzb21lIHNoZWxsIGNvbW1hbmRzIGluIHRoZSBydWxlcyB3aWxsIGJlIGVjaG9lZAoraWZuZXEgKCQoc3RyaXAgJChmaW5kc3RyaW5nICQoRUNIT1JVTEVTKSwgeWVzIFlFUyAxIHRydWUgVFJVRSkpLCkKK19AXyA6PQorZWxzZQorX0BfIDo9IEAKK2VuZGlmCisKKyMgRGlyZWN0b3J5IHRvIGhvbGQgY29tcGlsYXRpb24gaW50ZXJtZWRpYXRlIGZpbGVzCitUTVBfRElSIDo9IHRtcAorCisjIEdldCBzb3VyY2VzIGFuZCBoZWFkZXJzIHRvIGJlIGNvbXBpbGVkCitpbmNsdWRlIE1ha2VmaWxlLmluYworCisjIExpc3Qgb2YgaGVhZGVycworSU5DTFVERV9GSUxFUyA6PSAkKEhIRUFERVJTKQorSU5DTFVERV9GSUxFUyArPSAkKHNoZWxsIGZpbmQgLi4vaW5jbHVkZSAtbmFtZSBcKi5oKQorCisjIExpc3Qgb2Ygc291cmNlcworT0JKTElTVCA6PSAkKENTT1VSQ0VTOiUuYz0kKFRNUF9ESVIpLyUkKE9CSl9FWFRFTlNJT04pKQorCisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjIyMjIGRlZmF1bHQgcnVsZQorIyBJdCBzaG91bGQgYmUgZmlyc3QgcnVsZSBpbiB0aGlzIGZpbGUKKy5QSE9OWTogZGVmYXVsdAorZGVmYXVsdDogbGliY3VybC5hCisKKyMjIyMgQ29tcGlsaW5nIEMgZmlsZXMKKyQoVE1QX0RJUikvJSQoT0JKX0VYVEVOU0lPTik6ICUuYyAkKE1BS0VGSUxFUykKKwlAZWNobyBDb21waWxpbmcgQyBmaWxlICQ8ICQoRUNIT19TVERPVVQpCisJQFsgLWQgJChARCkgXSB8fCBta2RpciAtcCAkKEBEKQorCSQoX0BfKSAkKFRPT0xfQ0hBSU5fQklOKSQoQ0MpICQoQ09NUElMRV9PTkxZX0ZMQUcpICQoQ0ZMQUdTKSAkPCAkKENDX09CSl9PVVRQVVQpCisKKyMjIyMgQ3JlYXRpbmcgbGlicmFyeQorJChMSUJTX1RBUkdFVF9MSVNUKTogJChJTkNMVURFX0ZJTEVTKSAkKE1BS0VGSUxFUykgJChPQkpMSVNUKQorCUBlY2hvIENyZWF0aW5nIGxpYnJhcnkgJEAgJChFQ0hPX1NURE9VVCkKKwkkKF9AXykgWyAtZCAkKEBEKSBdIHx8IG1rZGlyIC1wICQoQEQpCisJJChfQF8pIHJtIC1mICRACisJJChfQF8pICQoVE9PTF9DSEFJTl9CSU4pJChBUikgJChBUkZMQUdTKSAkQCAkKGZpbHRlciAlJChPQkpfRVhURU5TSU9OKSwgJF4pCisKKyMjIyMgQ3JlYXRpbmcgYXBwbGljYXRpb24KKyQoRVhFX1RBUkdFVF9MSVNUKTogJChJTkNMVURFX0ZJTEVTKSAkKE1BS0VGSUxFUykgJChMSUJTX1RBUkdFVF9MSVNUKQorCUBlY2hvIENyZWF0aW5nIGFwcGxpY2F0aW9uICRACisJQFsgLWQgJChARCkgXSB8fCBta2RpciAtcCAkKEBEKQorCSQoX0BfKSAkKFRPT0xfQ0hBSU5fQklOKSQoTElOSykgJChDQ19PQkpfT1VUUFVUKSAkKCQoQClfRVhFX09CSl9MSVNUKSAkKExERkxBR1MpICQoJChAKV9FWEVfTElCU19ORUVERUQ6JT0kKExJQlNfRkxBRyklKSAkKExJQlNfTElTVDolPSQoTElCU19GTEFHKSUpICQoVVNFUl9MSUJTX0xJU1QpICQoVVNFUl9MSUJTX0xJU1QpCisKKyMjIyMgTWFzdGVyIFRhcmdldHMKK2xpYnM6ICQoTElCU19UQVJHRVRfTElTVCkKKwlAZWNobyBBbGwgbGlicyBtYWRlLgorCithbGw6ICQoTElCU19UQVJHRVRfTElTVCkgJChFWEVfVEFSR0VUX0xJU1QpICQoSU5DTFVERV9UQVJHRVRfTElTVCkKKwlAZWNobyBBbGwgdGFyZ2V0cyBtYWRlLgorCisjIENsZWFuIHVwCisuUEhPTlk6IGNsZWFuCitjbGVhbjoKKwkkKF9AXykgcm0gLXJmICQoVE1QX0RJUikKKwlAZWNobyBsaWJjdXJsIHdhcyBjbGVhbmVkLgpkaWZmIC0tZ2l0IGEvbGliL05PVElDRSBiL2xpYi9OT1RJQ0UKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE2M2IyOTkuLjAwMDAwMDAKLS0tIGEvbGliL05PVElDRQorKysgL2Rldi9udWxsCkBAIC0xLDIxICswLDAgQEAKLUNPUFlSSUdIVCBBTkQgUEVSTUlTU0lPTiBOT1RJQ0UKLQotQ29weXJpZ2h0IChjKSAxOTk2IC0gMjAxMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LgotCi1BbGwgcmlnaHRzIHJlc2VydmVkLgotCi1QZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkgcHVycG9zZQotd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0Ci1ub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCi0KLVRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCi1JTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKLUZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQgT0YgVEhJUkQgUEFSVFkgUklHSFRTLiBJTgotTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sCi1EQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IKLU9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFCi1PUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCi0KLUV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lIG9mIGEgY29weXJpZ2h0IGhvbGRlciBzaGFsbCBub3QKLWJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncwotaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gYXV0aG9yaXphdGlvbiBvZiB0aGUgY29weXJpZ2h0IGhvbGRlci4KZGlmZiAtLWdpdCBhL2xpYi9SRUFETUUuYXJlcyBiL2xpYi9SRUFETUUuYXJlcwppbmRleCBkM2VlMjRiLi44Yzc3OTM3IDEwMDY0NAotLS0gYS9saWIvUkVBRE1FLmFyZXMKKysrIGIvbGliL1JFQURNRS5hcmVzCkBAIC0xMSw3ICsxMSw3IEBACiAgIGh0dHA6Ly9jLWFyZXMuaGF4eC5zZS8KIAogTk9URQotICBUaGUgbGF0ZXN0IGxpYmN1cmwgdmVyc2lvbiByZXF1aXJlcyBjLWFyZXMgMS40LjAgb3IgbGF0ZXIuCisgIFRoZSBsYXRlc3QgbGliY3VybCB2ZXJzaW9uIHJlcXVpcmVzIGMtYXJlcyAxLjYuMCBvciBsYXRlci4KIAogICBPbmNlIHVwb24gdGhlIHRpbWUgbGliY3VybCBidWlsdCBmaW5lIHdpdGggdGhlICJvcmlnaW5hbCIgYXJlcy4gVGhhdCBpcyBubwogICBsb25nZXIgdHJ1ZS4gWW91IG5lZWQgdG8gdXNlIGMtYXJlcy4KZGlmZiAtLWdpdCBhL2xpYi9jb25maWctYW1pZ2Fvcy5oIGIvbGliL2NvbmZpZy1hbWlnYW9zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTlmZDU2NwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jb25maWctYW1pZ2Fvcy5oCkBAIC0wLDAgKzEsMTUxIEBACisjaWZuZGVmIExJQkNVUkxfQ09ORklHX0FNSUdBT1NfSAorI2RlZmluZSBMSUJDVVJMX0NPTkZJR19BTUlHQU9TX0gKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMDksIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisgKgorICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZkZWYgX19BTUlHQV9fIC8qIEFueSBBbWlnYU9TIGZsYXZvdXIgKi8KKworI2RlZmluZSBIQVZFX0FSUEFfSU5FVF9IIDEKKyNkZWZpbmUgSEFWRV9DTE9TRVNPQ0tFVF9DQU1FTCAxCisjZGVmaW5lIEhBVkVfR0VUSE9TVEJZQUREUiAxCisjZGVmaW5lIEhBVkVfSU5FVF9BRERSIDEKKyNkZWZpbmUgSEFWRV9JTlRUWVBFU19IIDEKKyNkZWZpbmUgSEFWRV9JT0NUTFNPQ0tFVF9DQU1FTCAxCisjZGVmaW5lIEhBVkVfSU9DVExTT0NLRVRfQ0FNRUxfRklPTkJJTyAxCisjZGVmaW5lIEhBVkVfTElCQ1JZUFRPIDEKKyNkZWZpbmUgSEFWRV9MSUJTU0wgMQorI2RlZmluZSBIQVZFX0xJQlogMQorI2RlZmluZSBIQVZFX0xPTkdMT05HIDEKKyNkZWZpbmUgSEFWRV9NQUxMT0NfSCAxCisjZGVmaW5lIEhBVkVfTUVNT1JZX0ggMQorI2RlZmluZSBIQVZFX05FVERCX0ggMQorI2RlZmluZSBIQVZFX05FVElORVRfSU5fSCAxCisjZGVmaW5lIEhBVkVfTkVUX0lGX0ggMQorI2RlZmluZSBIQVZFX09QRU5TU0xfQ1JZUFRPX0ggMQorI2RlZmluZSBIQVZFX09QRU5TU0xfRVJSX0ggMQorI2RlZmluZSBIQVZFX09QRU5TU0xfUEVNX0ggMQorI2RlZmluZSBIQVZFX09QRU5TU0xfUlNBX0ggMQorI2RlZmluZSBIQVZFX09QRU5TU0xfU1NMX0ggMQorI2RlZmluZSBIQVZFX09QRU5TU0xfWDUwOV9IIDEKKyNkZWZpbmUgSEFWRV9QRVJST1IgMQorI2RlZmluZSBIQVZFX1BXRF9IIDEKKyNkZWZpbmUgSEFWRV9SQU5EX0VHRCAxCisjZGVmaW5lIEhBVkVfUkFORF9TVEFUVVMgMQorI2RlZmluZSBIQVZFX1NFTEVDVCAxCisjZGVmaW5lIEhBVkVfU0VUSk1QX0ggMQorI2RlZmluZSBIQVZFX1NHVFRZX0ggMQorI2RlZmluZSBIQVZFX1NJR05BTCAxCisjZGVmaW5lIEhBVkVfU0lHTkFMX0ggMQorI2RlZmluZSBIQVZFX1NJR19BVE9NSUNfVCAxCisjZGVmaW5lIEhBVkVfU09DS0VUIDEKKyNkZWZpbmUgSEFWRV9TVFJDQVNFQ01QIDEKKyNkZWZpbmUgSEFWRV9TVFJEVVAgMQorI2RlZmluZSBIQVZFX1NUUkZUSU1FIDEKKyNkZWZpbmUgSEFWRV9TVFJJQ01QIDEKKyNkZWZpbmUgSEFWRV9TVFJJTkdTX0ggMQorI2RlZmluZSBIQVZFX1NUUklOR19IIDEKKyNkZWZpbmUgSEFWRV9TVFJTVFIgMQorI2RlZmluZSBIQVZFX1NUUlVDVF9USU1FVkFMIDEKKyNkZWZpbmUgSEFWRV9TWVNfUEFSQU1fSCAxCisjZGVmaW5lIEhBVkVfU1lTX1NPQ0tFVF9IIDEKKyNkZWZpbmUgSEFWRV9TWVNfU09DS0lPX0ggMQorI2RlZmluZSBIQVZFX1NZU19TVEFUX0ggMQorI2RlZmluZSBIQVZFX1NZU19USU1FX0ggMQorI2RlZmluZSBIQVZFX1NZU19UWVBFU19IIDEKKyNkZWZpbmUgSEFWRV9URVJNSU9TX0ggMQorI2RlZmluZSBIQVZFX1RFUk1JT19IIDEKKyNkZWZpbmUgSEFWRV9USU1FX0ggMQorI2RlZmluZSBIQVZFX1VOQU1FIDEKKyNkZWZpbmUgSEFWRV9VTklTVERfSCAxCisjZGVmaW5lIEhBVkVfVVRJTUUgMQorI2RlZmluZSBIQVZFX1VUSU1FX0ggMQorI2RlZmluZSBIQVZFX1dSSVRBQkxFX0FSR1YgMQorI2RlZmluZSBIQVZFX1pMSUJfSCAxCisjZGVmaW5lIEhBVkVfU1lTX0lPQ1RMX0ggMQorCisjZGVmaW5lIE5FRURfTUFMTE9DX0ggMQorCisjZGVmaW5lIFNJWkVPRl9JTlQgNAorI2RlZmluZSBTSVpFT0ZfU0hPUlQgMgorCisjZGVmaW5lIFVTRV9PUEVOU1NMIDEKKyNkZWZpbmUgVVNFX1NTTEVBWSAxCisjZGVmaW5lIENVUkxfRElTQUJMRV9MREFQIDEKKworCisjZGVmaW5lIE9TICJBbWlnYU9TIgorCisjZGVmaW5lIFBBQ0tBR0UgImN1cmwiCisjZGVmaW5lIFBBQ0tBR0VfQlVHUkVQT1JUICJjdXJsLWJ1Z0BoYXh4LnNlIgorI2RlZmluZSBQQUNLQUdFX05BTUUgImN1cmwiCisjZGVmaW5lIFBBQ0tBR0VfU1RSSU5HICJjdXJsIC0iCisjZGVmaW5lIFBBQ0tBR0VfVEFSTkFNRSAiY3VybCIKKyNkZWZpbmUgUEFDS0FHRV9WRVJTSU9OICItIgorI2RlZmluZSBDVVJMX0NBX0JVTkRMRSAiczpjdXJsLWNhLWJ1bmRsZS5jcnQiCisKKyNkZWZpbmUgUkVUU0lHVFlQRSB2b2lkCisjZGVmaW5lIFNFTEVDVF9UWVBFX0FSRzEgaW50CisjZGVmaW5lIFNFTEVDVF9UWVBFX0FSRzIzNCAoZmRfc2V0ICopCisjZGVmaW5lIFNFTEVDVF9UWVBFX0FSRzUgKHN0cnVjdCB0aW1ldmFsICopCisKKyNkZWZpbmUgU1REQ19IRUFERVJTIDEKKyNkZWZpbmUgVElNRV9XSVRIX1NZU19USU1FIDEKKworI2RlZmluZSBpbl9hZGRyX3QgaW50CisKKyNpZm5kZWYgT19SRE9OTFkKKyMgZGVmaW5lIE9fUkRPTkxZIDB4MDAwMAorI2VuZGlmCisKKyNkZWZpbmUgSEFWRV9HRVROQU1FSU5GTyAxCisjZGVmaW5lIEdFVE5BTUVJTkZPX1FVQUxfQVJHMSBjb25zdAorI2RlZmluZSBHRVROQU1FSU5GT19UWVBFX0FSRzEgc3RydWN0IHNvY2thZGRyICoKKyNkZWZpbmUgR0VUTkFNRUlORk9fVFlQRV9BUkcyIGludAorI2RlZmluZSBHRVROQU1FSU5GT19UWVBFX0FSRzQ2IHNpemVfdAorI2RlZmluZSBHRVROQU1FSU5GT19UWVBFX0FSRzcgaW50CisKKyNkZWZpbmUgSEFWRV9SRUNWIDEKKyNkZWZpbmUgUkVDVl9UWVBFX0FSRzEgbG9uZworI2RlZmluZSBSRUNWX1RZUEVfQVJHMiBjaGFyICoKKyNkZWZpbmUgUkVDVl9UWVBFX0FSRzMgbG9uZworI2RlZmluZSBSRUNWX1RZUEVfQVJHNCBsb25nCisjZGVmaW5lIFJFQ1ZfVFlQRV9SRVRWIGxvbmcKKworI2RlZmluZSBIQVZFX1JFQ1ZGUk9NIDEKKyNkZWZpbmUgUkVDVkZST01fVFlQRV9BUkcxIGxvbmcKKyNkZWZpbmUgUkVDVkZST01fVFlQRV9BUkcyIGNoYXIKKyNkZWZpbmUgUkVDVkZST01fVFlQRV9BUkczIGxvbmcKKyNkZWZpbmUgUkVDVkZST01fVFlQRV9BUkc0IGxvbmcKKyNkZWZpbmUgUkVDVkZST01fVFlQRV9BUkc1IHN0cnVjdCBzb2NrYWRkcgorI2RlZmluZSBSRUNWRlJPTV9UWVBFX0FSRzYgbG9uZworI2RlZmluZSBSRUNWRlJPTV9UWVBFX1JFVFYgbG9uZworCisjZGVmaW5lIEhBVkVfU0VORCAxCisjZGVmaW5lIFNFTkRfVFlQRV9BUkcxIGludAorI2RlZmluZSBTRU5EX1FVQUxfQVJHMiBjb25zdAorI2RlZmluZSBTRU5EX1RZUEVfQVJHMiBjaGFyICoKKyNkZWZpbmUgU0VORF9UWVBFX0FSRzMgaW50CisjZGVmaW5lIFNFTkRfVFlQRV9BUkc0IGludAorI2RlZmluZSBTRU5EX1RZUEVfUkVUViBpbnQKKworI2VuZGlmIC8qIF9fQU1JR0FfXyAqLworI2VuZGlmIC8qIExJQkNVUkxfQ09ORklHX0FNSUdBT1NfSCAqLwpkaWZmIC0tZ2l0IGEvbGliL2NvbmZpZy1tYWMuaCBiL2xpYi9jb25maWctbWFjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzQwZjFkOQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jb25maWctbWFjLmgKQEAgLTAsMCArMSwxMDAgQEAKKyNpZm5kZWYgX19MSUJfQ09ORklHX01BQ19ICisjZGVmaW5lIF9fTElCX0NPTkZJR19NQUNfSAorCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisvKiAgIGxpYi9jb25maWctbWFjLmggLSBIYW5kIGNyYWZ0ZWQgY29uZmlnIGZpbGUgZm9yIE1hYyBPUyA5ICAgICAgICAgICovCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisvKiAgT24gTWFjIE9TIFggeW91IG11c3QgcnVuIGNvbmZpZ3VyZSB0byBnZW5lcmF0ZSBjdXJsX2NvbmZpZy5oIGZpbGUgICovCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisKKyNkZWZpbmUgT1MgIm1hYyIKKworI2RlZmluZSBIQVZFX05FVElORVRfSU5fSCAgICAgICAxCisjZGVmaW5lIEhBVkVfU1lTX1NPQ0tFVF9IICAgICAgIDEKKyNkZWZpbmUgSEFWRV9TWVNfU0VMRUNUX0ggICAgICAgMQorI2RlZmluZSBIQVZFX05FVERCX0ggICAgICAgICAgICAxCisjZGVmaW5lIEhBVkVfQVJQQV9JTkVUX0ggICAgICAgIDEKKyNkZWZpbmUgSEFWRV9VTklTVERfSCAgICAgICAgICAgMQorI2RlZmluZSBIQVZFX05FVF9JRl9IICAgICAgICAgICAxCisjZGVmaW5lIEhBVkVfU1lTX1RZUEVTX0ggICAgICAgIDEKKyNkZWZpbmUgSEFWRV9HRVRUSU1FT0ZEQVkgICAgICAgMQorI2RlZmluZSBIQVZFX0ZDTlRMX0ggICAgICAgICAgICAxCisjZGVmaW5lIEhBVkVfU1lTX1NUQVRfSCAgICAgICAgIDEKKyNkZWZpbmUgSEFWRV9BTExPQ0FfSCAgICAgICAgICAgMQorI2RlZmluZSBIQVZFX1RJTUVfSCAgICAgICAgICAgICAxCisjZGVmaW5lIEhBVkVfU1RETElCX0ggICAgICAgICAgIDEKKyNkZWZpbmUgSEFWRV9VVElNRV9IICAgICAgICAgICAgMQorI2RlZmluZSBIQVZFX1NZU19USU1FX0ggICAgICAgICAxCisKKyNkZWZpbmUgVElNRV9XSVRIX1NZU19USU1FICAgICAgMQorCisjZGVmaW5lIEhBVkVfQUxBUk0gICAgICAgICAgICAgIDEKKyNkZWZpbmUgSEFWRV9TVFJEVVAgICAgICAgICAgICAgMQorI2RlZmluZSBIQVZFX1VUSU1FICAgICAgICAgICAgICAxCisjZGVmaW5lIEhBVkVfU0VUVkJVRiAgICAgICAgICAgIDEKKyNkZWZpbmUgSEFWRV9TVFJGVElNRSAgICAgICAgICAgMQorI2RlZmluZSBIQVZFX0lORVRfQUREUiAgICAgICAgICAxCisjZGVmaW5lIEhBVkVfTUVNQ1BZICAgICAgICAgICAgIDEKKyNkZWZpbmUgSEFWRV9TRUxFQ1QgICAgICAgICAgICAgMQorI2RlZmluZSBIQVZFX1NPQ0tFVCAgICAgICAgICAgICAxCisjZGVmaW5lIEhBVkVfU1RSVUNUX1RJTUVWQUwgICAgIDEKKworLy8jZGVmaW5lIEhBVkVfU1RSSUNNUCAgICAgICAgICAxCisjZGVmaW5lIEhBVkVfU0lHQUNUSU9OICAgICAgICAgIDEKKyNkZWZpbmUgSEFWRV9TSUdOQUxfSCAgICAgICAgICAgMQorI2RlZmluZSBIQVZFX1NJR19BVE9NSUNfVCAgICAgICAxCisKKyNpZmRlZiBNQUNPU19TU0xfU1VQUE9SVAorIyAgICAgICBkZWZpbmUgVVNFX1NTTEVBWSAgICAgICAxCisjICAgICAgIGRlZmluZSBVU0VfT1BFTlNTTCAgICAgIDEKKyNlbmRpZgorCisjZGVmaW5lIENVUkxfRElTQUJMRV9MREFQICAgICAgIDEKKworI2RlZmluZSBIQVZFX1JBTkRfU1RBVFVTICAgICAgICAxCisjZGVmaW5lIEhBVkVfUkFORF9FR0QgICAgICAgICAgIDEKKworI2RlZmluZSBIQVZFX0lPQ1RMICAgICAgICAgICAgICAxCisjZGVmaW5lIEhBVkVfSU9DVExfRklPTkJJTyAgICAgIDEKKworI2RlZmluZSBSRVRTSUdUWVBFIHZvaWQKKworI2RlZmluZSBTSVpFT0ZfSU5UICAgICAgICAgICAgICA0CisjZGVmaW5lIFNJWkVPRl9TSE9SVCAgICAgICAgICAgIDIKKworI2RlZmluZSBIQVZFX0dFVE5BTUVJTkZPIDEKKyNkZWZpbmUgR0VUTkFNRUlORk9fUVVBTF9BUkcxIGNvbnN0CisjZGVmaW5lIEdFVE5BTUVJTkZPX1RZUEVfQVJHMSBzdHJ1Y3Qgc29ja2FkZHIgKgorI2RlZmluZSBHRVROQU1FSU5GT19UWVBFX0FSRzIgc29ja2xlbl90CisjZGVmaW5lIEdFVE5BTUVJTkZPX1RZUEVfQVJHNDYgc2l6ZV90CisjZGVmaW5lIEdFVE5BTUVJTkZPX1RZUEVfQVJHNyBpbnQKKworI2RlZmluZSBIQVZFX1JFQ1YgMQorI2RlZmluZSBSRUNWX1RZUEVfQVJHMSBpbnQKKyNkZWZpbmUgUkVDVl9UWVBFX0FSRzIgdm9pZCAqCisjZGVmaW5lIFJFQ1ZfVFlQRV9BUkczIHNpemVfdAorI2RlZmluZSBSRUNWX1RZUEVfQVJHNCBpbnQKKyNkZWZpbmUgUkVDVl9UWVBFX1JFVFYgc3NpemVfdAorCisjZGVmaW5lIEhBVkVfUkVDVkZST00gMQorI2RlZmluZSBSRUNWRlJPTV9UWVBFX0FSRzEgaW50CisjZGVmaW5lIFJFQ1ZGUk9NX1RZUEVfQVJHMiB2b2lkCisjZGVmaW5lIFJFQ1ZGUk9NX1RZUEVfQVJHMyBzaXplX3QKKyNkZWZpbmUgUkVDVkZST01fVFlQRV9BUkc0IGludAorI2RlZmluZSBSRUNWRlJPTV9UWVBFX0FSRzUgc3RydWN0IHNvY2thZGRyCisjZGVmaW5lIFJFQ1ZGUk9NX1RZUEVfQVJHNiBpbnQKKyNkZWZpbmUgUkVDVkZST01fVFlQRV9SRVRWIHNzaXplX3QKKyNkZWZpbmUgUkVDVkZST01fVFlQRV9BUkcyX0lTX1ZPSUQgMQorCisjZGVmaW5lIEhBVkVfU0VORCAxCisjZGVmaW5lIFNFTkRfVFlQRV9BUkcxIGludAorI2RlZmluZSBTRU5EX1FVQUxfQVJHMiBjb25zdAorI2RlZmluZSBTRU5EX1RZUEVfQVJHMiB2b2lkICoKKyNkZWZpbmUgU0VORF9UWVBFX0FSRzMgc2l6ZV9UCisjZGVmaW5lIFNFTkRfVFlQRV9BUkc0IGludAorI2RlZmluZSBTRU5EX1RZUEVfUkVUViBzc2l6ZV90CisKKyNkZWZpbmUgSEFWRV9FWFRSQV9TVFJJQ01QX0ggMQorI2RlZmluZSBIQVZFX0VYVFJBX1NUUkRVUF9IICAxCisKKyNlbmRpZiAvKiBfX0xJQl9DT05GSUdfTUFDX0ggKi8KZGlmZiAtLWdpdCBhL2xpYi9jb25maWctb3M0MDAuaCBiL2xpYi9jb25maWctb3M0MDAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYWQ0ZDBjCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2NvbmZpZy1vczQwMC5oCkBAIC0wLDAgKzEsNTE3IEBACisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisvKiAgICBsaWIvY29uZmlnLW9zNDAwLmggLSBIYW5kIGNyYWZ0ZWQgY29uZmlnIGZpbGUgZm9yIE9TLzQwMCAgICAgICovCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisKKyNwcmFnbWEgZW51bShpbnQpCisKKyN1bmRlZiBQQUNLQUdFCisKKy8qIFZlcnNpb24gbnVtYmVyIG9mIHRoaXMgYXJjaGl2ZS4gKi8KKyN1bmRlZiBWRVJTSU9OCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgZ2V0cGFzcyBmdW5jdGlvbi4gICovCisjdW5kZWYgSEFWRV9HRVRQQVNTCisKKy8qIERlZmluZSBjcHUtbWFjaGluZS1PUyAqLworI2RlZmluZSBPUyAiT1MvNDAwIgorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGdldGhvc3RieWFkZHJfcigpIGZ1bmN0aW9uIHdpdGggNSBhcmd1bWVudHMgKi8KKyNkZWZpbmUgSEFWRV9HRVRIT1NUQllBRERSX1JfNQorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGdldGhvc3RieWFkZHJfcigpIGZ1bmN0aW9uIHdpdGggNyBhcmd1bWVudHMgKi8KKyN1bmRlZiBIQVZFX0dFVEhPU1RCWUFERFJfUl83CisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgZ2V0aG9zdGJ5YWRkcl9yKCkgZnVuY3Rpb24gd2l0aCA4IGFyZ3VtZW50cyAqLworI3VuZGVmIEhBVkVfR0VUSE9TVEJZQUREUl9SXzgKKworLyogT1M0MDAgc3VwcG9ydHMgYSAzLWFyZ3VtZW50IEFTQ0lJIHZlcnNpb24gb2YgZ2V0aG9zdGJ5YWRkcl9yKCksIGJ1dCBpdHMKKyAqICBwcm90b3R5cGUgaXMgaW5jb21wYXRpYmxlIHdpdGggdGhlICJzdGFuZGFyZCIgb25lICgxc3QgYXJndW1lbnQgaXMgbm90CisgKiAgY29uc3QpLiBIb3dldmVyLCBnZXRhZGRyaW5mbygpIGlzIHN1cHBvcnRlZCAoQVNDSUkgdmVyc2lvbiBkZWZpbmVkIGFzCisgKiAgYSBsb2NhbCB3cmFwcGVyIGluIHNldHVwLW9zNDAwLmgpIGluIGEgdGhyZWFkc2FmZSB3YXk6IHdlIGNhbiB0aGVuCisgKiAgY29uZmlndXJlIGdldGFkZHJpbmZvKCkgYXMgc3VjaCBhbmQgZ2V0IHJpZCBvZiBnZXRob3N0YnluYW1lX3IoKSB3aXRob3V0CisgKiAgbG9zcyBvZiB0aHJlYWRzYWZlbmVzcy4gKi8KKyN1bmRlZiBIQVZFX0dFVEhPU1RCWU5BTUVfUgorI3VuZGVmIEhBVkVfR0VUSE9TVEJZTkFNRV9SXzMKKyN1bmRlZiBIQVZFX0dFVEhPU1RCWU5BTUVfUl81CisjdW5kZWYgSEFWRV9HRVRIT1NUQllOQU1FX1JfNgorI2RlZmluZSBIQVZFX0dFVEFERFJJTkZPCisjZGVmaW5lIEhBVkVfR0VUQUREUklORk9fVEhSRUFEU0FGRQorCisvKiBEZWZpbmUgaWYgeW91IG5lZWQgdGhlIF9SRUVOVFJBTlQgZGVmaW5lIGZvciBzb21lIGZ1bmN0aW9ucyAqLworI3VuZGVmIE5FRURfUkVFTlRSQU5UCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgS2VyYmVyb3M0IGxpYnJhcmllcyAoaW5jbHVkaW5nIC1sZGVzKSAqLworI3VuZGVmIEhBVkVfS1JCNAorCisvKiBEZWZpbmUgaWYgeW91IHdhbnQgdG8gZW5hYmxlIElQdjYgc3VwcG9ydCAqLworI2RlZmluZSBFTkFCTEVfSVBWNgorCisvKiBEZWZpbmUgaWYgc3RydWN0IHNvY2thZGRyX2luNiBoYXMgdGhlIHNpbjZfc2NvcGVfaWQgbWVtYmVyICovCisjZGVmaW5lIEhBVkVfU09DS0FERFJfSU42X1NJTjZfU0NPUEVfSUQgMQorCisvKiBEZWZpbmUgdGhpcyB0byAnaW50JyBpZiBzc2l6ZV90IGlzIG5vdCBhbiBhdmFpbGFibGUgdHlwZWRlZmVkIHR5cGUgKi8KKyN1bmRlZiBzc2l6ZV90CisKKy8qIERlZmluZSB0aGlzIGFzIGEgc3VpdGFibGUgZmlsZSB0byByZWFkIHJhbmRvbSBkYXRhIGZyb20gKi8KKyN1bmRlZiBSQU5ET01fRklMRQorCisvKiBEZWZpbmUgdGhpcyB0byB5b3VyIEVudHJvcHkgR2F0aGVyaW5nIERhZW1vbiBzb2NrZXQgcGF0aG5hbWUgKi8KKyN1bmRlZiBFR0RfU09DS0VUCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBhbGFybSBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9BTEFSTSAxCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPGFsbG9jYS5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX0FMTE9DQV9ICisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPGFycGEvaW5ldC5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9BUlBBX0lORVRfSAorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGBjbG9zZXNvY2tldCcgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9DTE9TRVNPQ0tFVAorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDxjcnlwdG8uaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9DUllQVE9fSAorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDxkZXMuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9ERVNfSAorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDxlcnIuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9FUlJfSAorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDxmY250bC5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9GQ05UTF9ICisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgYGdldGV1aWQnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX0dFVEVVSUQKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBgZ2V0aG9zdGJ5YWRkcicgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfR0VUSE9TVEJZQUREUgorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGBnZXRob3N0YnlhZGRyX3InIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX0dFVEhPU1RCWUFERFJfUgorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGBnZXRob3N0bmFtZScgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfR0VUSE9TVE5BTUUKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8Z2V0b3B0Lmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfR0VUT1BUX0gKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBgZ2V0cGFzc19yJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX0dFVFBBU1NfUgorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGBnZXRwd3VpZCcgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfR0VUUFdVSUQKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBgZ2V0c2VydmJ5bmFtZScgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfR0VUU0VSVkJZTkFNRQorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGBnZXR0aW1lb2ZkYXknIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX0dFVFRJTUVPRkRBWQorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGB0aW1ldmFsJyBzdHJ1Y3QuICovCisjZGVmaW5lIEhBVkVfU1RSVUNUX1RJTUVWQUwKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBgaW5ldF9hZGRyJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9JTkVUX0FERFIKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8aW50dHlwZXMuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfSU5UVFlQRVNfSAorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDxpby5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX0lPX0gKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBga3JiX2dldF9vdXJfaXBfZm9yX3JlYWxtJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX0tSQl9HRVRfT1VSX0lQX0ZPUl9SRUFMTQorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDxrcmIuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9LUkJfSAorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGBjcnlwdG8nIGxpYnJhcnkgKC1sY3J5cHRvKS4gKi8KKyN1bmRlZiBIQVZFX0xJQkNSWVBUTworCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGBuc2wnIGxpYnJhcnkgKC1sbnNsKS4gKi8KKyN1bmRlZiBIQVZFX0xJQk5TTAorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGByZXNvbHYnIGxpYnJhcnkgKC1scmVzb2x2KS4gKi8KKyN1bmRlZiBIQVZFX0xJQlJFU09MVgorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGByZXNvbHZlJyBsaWJyYXJ5ICgtbHJlc29sdmUpLiAqLworI3VuZGVmIEhBVkVfTElCUkVTT0xWRQorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGBzb2NrZXQnIGxpYnJhcnkgKC1sc29ja2V0KS4gKi8KKyN1bmRlZiBIQVZFX0xJQlNPQ0tFVAorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGBzc2wnIGxpYnJhcnkgKC1sc3NsKS4gKi8KKyN1bmRlZiBIQVZFX0xJQlNTTAorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgR1NTIEFQSS4gKi8KKyNkZWZpbmUgSEFWRV9HU1NBUEkKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBgdWNiJyBsaWJyYXJ5ICgtbHVjYikuICovCisjdW5kZWYgSEFWRV9MSUJVQ0IKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBgbG9jYWx0aW1lX3InIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX0xPQ0FMVElNRV9SCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPG1hbGxvYy5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9NQUxMT0NfSAorCisvKiBEZWZpbmUgaWYgeW91IG5lZWQgdGhlIG1hbGxvYy5oIGhlYWRlciBmaWxlIGV2ZW4gd2l0aCBzdGRsaWIuaCAgKi8KKy8qICNkZWZpbmUgTkVFRF9NQUxMT0NfSCAxICovCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPG1lbW9yeS5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX01FTU9SWV9ICisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPG5ldGRiLmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX05FVERCX0gKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8bmV0aW5ldC9pZl9ldGhlci5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX05FVElORVRfSUZfRVRIRVJfSAorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDxuZXRpbmV0L2luLmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX05FVElORVRfSU5fSAorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDxuZXQvaWYuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfTkVUX0lGX0gKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8b3BlbnNzbC9jcnlwdG8uaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9PUEVOU1NMX0NSWVBUT19ICisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPG9wZW5zc2wvZXJyLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfT1BFTlNTTF9FUlJfSAorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDxvcGVuc3NsL3BlbS5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX09QRU5TU0xfUEVNX0gKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8b3BlbnNzbC9yc2EuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9PUEVOU1NMX1JTQV9ICisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPG9wZW5zc2wvc3NsLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfT1BFTlNTTF9TU0xfSAorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDxvcGVuc3NsL3g1MDkuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9PUEVOU1NMX1g1MDlfSAorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDxwZW0uaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9QRU1fSAorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGBwZXJyb3InIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX1BFUlJPUgorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDxwd2QuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfUFdEX0gKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBgUkFORF9lZ2QnIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfUkFORF9FR0QKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBgUkFORF9zY3JlZW4nIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfUkFORF9TQ1JFRU4KKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBgUkFORF9zdGF0dXMnIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfUkFORF9TVEFUVVMKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8cnNhLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfUlNBX0gKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBgc2VsZWN0JyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9TRUxFQ1QKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBgc2V0dmJ1ZicgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfU0VUVkJVRgorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDxzZ3R0eS5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX1NHVFRZX0gKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBgc2lnYWN0aW9uJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9TSUdBQ1RJT04KKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBgc2lnbmFsJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX1NJR05BTAorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDxzaWduYWwuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfU0lHTkFMX0gKKworLyogRGVmaW5lIGlmIHNpZ19hdG9taWNfdCBpcyBhbiBhdmFpbGFibGUgdHlwZWRlZi4gKi8KKyNkZWZpbmUgSEFWRV9TSUdfQVRPTUlDX1QKKworLyogRGVmaW5lIGlmIHNpZ19hdG9taWNfdCBpcyBhbHJlYWR5IGRlZmluZWQgYXMgdm9sYXRpbGUuICovCisjdW5kZWYgSEFWRV9TSUdfQVRPTUlDX1RfVk9MQVRJTEUKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBgc29ja2V0JyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9TT0NLRVQKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8c3NsLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfU1NMX0gKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8c3RkaW50Lmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfU1RESU5UX0gKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8c3RkbGliLmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX1NURExJQl9ICisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgYHN0cmNhc2VjbXAnIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfU1RSQ0FTRUNNUAorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGBzdHJjbXBpJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX1NUUkNNUEkKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBgc3RyZHVwJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX1NUUkRVUAorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGBzdHJmdGltZScgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfU1RSRlRJTUUKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBgc3RyaWNtcCcgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9TVFJJQ01QCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPHN0cmluZ3MuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfU1RSSU5HU19ICisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPHN0cmluZy5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9TVFJJTkdfSAorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGBzdHJsY2F0JyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX1NUUkxDQVQKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBgc3RybGNweScgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9TVFJMQ1BZCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPHN0cm9wdHMuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9TVFJPUFRTX0gKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBgc3Ryc3RyJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9TVFJTVFIKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBgc3RydG9rX3InIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX1NUUlRPS19SCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgYHN0cnRvbGwnIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfU1RSVE9MTCAgICAgICAgICAgICAvKiBBbGxvd3MgQVNDSUkgY29tcGlsZSBvbiBWNVIxLiAqLworCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDxzeXMvcGFyYW0uaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfU1lTX1BBUkFNX0gKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3NlbGVjdC5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX1NZU19TRUxFQ1RfSAorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDxzeXMvc29ja2V0Lmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX1NZU19TT0NLRVRfSAorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDxzeXMvc29ja2lvLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfU1lTX1NPQ0tJT19ICisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy9zdGF0Lmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX1NZU19TVEFUX0gKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3RpbWUuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfU1lTX1RJTUVfSAorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDxzeXMvdHlwZXMuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfU1lTX1RZUEVTX0gKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3VuLmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX1NZU19VTl9ICisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy9pb2N0bC5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9TWVNfSU9DVExfSAorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGB0Y2dldGF0dHInIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfVENHRVRBVFRSCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgYHRjc2V0YXR0cicgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9UQ1NFVEFUVFIKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8dGVybWlvcy5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX1RFUk1JT1NfSAorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDx0ZXJtaW8uaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9URVJNSU9fSAorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDx0aW1lLmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX1RJTUVfSAorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGB1bmFtZScgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9VTkFNRQorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDx1bmlzdGQuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfVU5JU1REX0gKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8d2luc29jay5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX1dJTlNPQ0tfSAorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDx4NTA5Lmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfWDUwOV9ICisKKy8qIE5hbWUgb2YgcGFja2FnZSAqLworI3VuZGVmIFBBQ0tBR0UKKworLyogRGVmaW5lIGFzIHRoZSByZXR1cm4gdHlwZSBvZiBzaWduYWwgaGFuZGxlcnMgKGBpbnQnIG9yIGB2b2lkJykuICovCisjZGVmaW5lIFJFVFNJR1RZUEUgdm9pZAorCisvKiBUaGUgc2l6ZSBvZiBgaW50JywgYXMgY29tcHV0ZWQgYnkgc2l6ZW9mLiAqLworI2RlZmluZSBTSVpFT0ZfSU5UICAgICAgICAgICAgICA0CisKKy8qIFRoZSBzaXplIG9mIGEgYGxvbmcgZG91YmxlJywgYXMgY29tcHV0ZWQgYnkgc2l6ZW9mLiAqLworI2RlZmluZSBTSVpFT0ZfTE9OR19ET1VCTEUgICAgICA4CisKKy8qIERlZmluZSBpZiB0aGUgY29tcGlsZXIgc3VwcG9ydHMgdGhlICdsb25nIGxvbmcnIGRhdGEgdHlwZS4gKi8KKyNkZWZpbmUgSEFWRV9MT05HTE9ORworCisvKiBUaGUgc2l6ZSBvZiBhIGBsb25nIGxvbmcnLCBhcyBjb21wdXRlZCBieSBzaXplb2YuICovCisjZGVmaW5lIFNJWkVPRl9MT05HX0xPTkcgICAgICAgIDgKKworLyogVGhlIHNpemUgb2YgYHNob3J0JywgYXMgY29tcHV0ZWQgYnkgc2l6ZW9mLiAqLworI2RlZmluZSBTSVpFT0ZfU0hPUlQgICAgICAgICAgICAyCisKKy8qIFdoZXRoZXIgbG9uZyBsb25nIGNvbnN0YW50cyBtdXN0IGJlIHN1ZmZpeGVkIGJ5IExMLiAqLworCisjZGVmaW5lIEhBVkVfTEwKKworLyogRGVmaW5lIHRoaXMgaWYgeW91IGhhdmUgc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgKi8KKyNkZWZpbmUgSEFWRV9TVFJVQ1RfU09DS0FERFJfU1RPUkFHRQorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIEFOU0kgQyBoZWFkZXIgZmlsZXMuICovCisjZGVmaW5lIFNURENfSEVBREVSUworCisvKiBEZWZpbmUgaWYgeW91IGNhbiBzYWZlbHkgaW5jbHVkZSBib3RoIDxzeXMvdGltZS5oPiBhbmQgPHRpbWUuaD4uICovCisjZGVmaW5lIFRJTUVfV0lUSF9TWVNfVElNRQorCisvKiBWZXJzaW9uIG51bWJlciBvZiBwYWNrYWdlICovCisjdW5kZWYgVkVSU0lPTgorCisvKiBOdW1iZXIgb2YgYml0cyBpbiBhIGZpbGUgb2Zmc2V0LCBvbiBob3N0cyB3aGVyZSB0aGlzIGlzIHNldHRhYmxlLiAqLworI3VuZGVmIF9GSUxFX09GRlNFVF9CSVRTCisKKy8qIERlZmluZSBmb3IgbGFyZ2UgZmlsZXMsIG9uIEFJWC1zdHlsZSBob3N0cy4gKi8KKyNkZWZpbmUgX0xBUkdFX0ZJTEVTCisKKy8qIERlZmluZSB0byBlbXB0eSBpZiBgY29uc3QnIGRvZXMgbm90IGNvbmZvcm0gdG8gQU5TSSBDLiAqLworI3VuZGVmIGNvbnN0CisKKy8qIHR5cGUgdG8gdXNlIGluIHBsYWNlIG9mIGluX2FkZHJfdCBpZiBub3QgZGVmaW5lZCAqLworI2RlZmluZSBpbl9hZGRyX3QgICAgICAgdW5zaWduZWQgbG9uZworCisvKiBEZWZpbmUgdG8gYHVuc2lnbmVkJyBpZiA8c3lzL3R5cGVzLmg+IGRvZXMgbm90IGRlZmluZS4gKi8KKyN1bmRlZiBzaXplX3QKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBpb2N0bCBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9JT0NUTAorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgYSB3b3JraW5nIGlvY3RsIEZJT05CSU8gZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfSU9DVExfRklPTkJJTworCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgYSB3b3JraW5nIGlvY3RsIFNJT0NHSUZBRERSIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX0lPQ1RMX1NJT0NHSUZBRERSCisKKy8qIFRvIGRpc2FibGUgTERBUCAqLworI3VuZGVmIENVUkxfRElTQUJMRV9MREFQCisKKy8qIFRvIGF2b2lkIGV4dGVybmFsIHVzZSBvZiBsaWJyYXJ5IGhpZGRlbiBzeW1ib2xzICovCisjZGVmaW5lIENVUkxfSElEREVOX1NZTUJPTFMKKworLyogRXh0ZXJuYWwgc3ltYm9scyBuZWVkIG5vIHNwZWNpYWwga2V5d29yZC4gKi8KKyNkZWZpbmUgQ1VSTF9FWFRFUk5fU1lNQk9MCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgbGRhcF91cmxfcGFyc2UgcHJvY2VkdXJlLiAqLworLyogI2RlZmluZSBIQVZFX0xEQVBfVVJMX1BBUlNFICovICAgIC8qIERpc2FibGVkIGJlY2F1c2Ugb2YgYW4gSUJNIGJ1Zy4gKi8KKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBnZXRuYW1laW5mbyBmdW5jdGlvbi4gKi8KKy8qIE9TNDAwIGhhcyBubyBBU0NJSSB2ZXJzaW9uIG9mIHRoaXMgcHJvY2VkdXJlOiB3cmFwcGVkIGluIHNldHVwLW9zNDAwLmguICovCisjZGVmaW5lIEhBVkVfR0VUTkFNRUlORk8KKworLyogRGVmaW5lIHRvIHRoZSB0eXBlIHF1YWxpZmllciBvZiBhcmcgMSBmb3IgZ2V0bmFtZWluZm8uICovCisjZGVmaW5lIEdFVE5BTUVJTkZPX1FVQUxfQVJHMSBjb25zdAorCisvKiBEZWZpbmUgdG8gdGhlIHR5cGUgb2YgYXJnIDEgZm9yIGdldG5hbWVpbmZvLiAqLworI2RlZmluZSBHRVROQU1FSU5GT19UWVBFX0FSRzEgc3RydWN0IHNvY2thZGRyICoKKworLyogRGVmaW5lIHRvIHRoZSB0eXBlIG9mIGFyZyAyIGZvciBnZXRuYW1laW5mby4gKi8KKyNkZWZpbmUgR0VUTkFNRUlORk9fVFlQRV9BUkcyIHNvY2tsZW5fdAorCisvKiBEZWZpbmUgdG8gdGhlIHR5cGUgb2YgYXJncyA0IGFuZCA2IGZvciBnZXRuYW1laW5mby4gKi8KKyNkZWZpbmUgR0VUTkFNRUlORk9fVFlQRV9BUkc0NiBzb2NrbGVuX3QKKworLyogRGVmaW5lIHRvIHRoZSB0eXBlIG9mIGFyZyA3IGZvciBnZXRuYW1laW5mby4gKi8KKyNkZWZpbmUgR0VUTkFNRUlORk9fVFlQRV9BUkc3IGludAorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIHJlY3YgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfUkVDVgorCisvKiBEZWZpbmUgdG8gdGhlIHR5cGUgb2YgYXJnIDEgZm9yIHJlY3YuICovCisjZGVmaW5lIFJFQ1ZfVFlQRV9BUkcxIGludAorCisvKiBEZWZpbmUgdG8gdGhlIHR5cGUgb2YgYXJnIDIgZm9yIHJlY3YuICovCisjZGVmaW5lIFJFQ1ZfVFlQRV9BUkcyIGNoYXIgKgorCisvKiBEZWZpbmUgdG8gdGhlIHR5cGUgb2YgYXJnIDMgZm9yIHJlY3YuICovCisjZGVmaW5lIFJFQ1ZfVFlQRV9BUkczIGludAorCisvKiBEZWZpbmUgdG8gdGhlIHR5cGUgb2YgYXJnIDQgZm9yIHJlY3YuICovCisjZGVmaW5lIFJFQ1ZfVFlQRV9BUkc0IGludAorCisvKiBEZWZpbmUgdG8gdGhlIGZ1bmN0aW9uIHJldHVybiB0eXBlIGZvciByZWN2LiAqLworI2RlZmluZSBSRUNWX1RZUEVfUkVUViBpbnQKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSByZWN2ZnJvbSBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9SRUNWRlJPTQorCisvKiBEZWZpbmUgdG8gdGhlIHR5cGUgb2YgYXJnIDEgZm9yIHJlY3Zmcm9tLiAqLworI2RlZmluZSBSRUNWRlJPTV9UWVBFX0FSRzEgaW50CisKKy8qIERlZmluZSB0byB0aGUgdHlwZSBwb2ludGVkIGJ5IGFyZyAyIGZvciByZWN2ZnJvbS4gKi8KKyNkZWZpbmUgUkVDVkZST01fVFlQRV9BUkcyIGNoYXIKKworLyogRGVmaW5lIHRvIHRoZSB0eXBlIG9mIGFyZyAzIGZvciByZWN2ZnJvbS4gKi8KKyNkZWZpbmUgUkVDVkZST01fVFlQRV9BUkczIGludAorCisvKiBEZWZpbmUgdG8gdGhlIHR5cGUgb2YgYXJnIDQgZm9yIHJlY3Zmcm9tLiAqLworI2RlZmluZSBSRUNWRlJPTV9UWVBFX0FSRzQgaW50CisKKy8qIERlZmluZSB0byB0aGUgdHlwZSBwb2ludGVkIGJ5IGFyZyA1IGZvciByZWN2ZnJvbS4gKi8KKyNkZWZpbmUgUkVDVkZST01fVFlQRV9BUkc1IHN0cnVjdCBzb2NrYWRkcgorCisvKiBEZWZpbmUgdG8gdGhlIHR5cGUgcG9pbnRlZCBieSBhcmcgNiBmb3IgcmVjdmZyb20uICovCisjZGVmaW5lIFJFQ1ZGUk9NX1RZUEVfQVJHNiBpbnQKKworLyogRGVmaW5lIHRvIHRoZSBmdW5jdGlvbiByZXR1cm4gdHlwZSBmb3IgcmVjdmZyb20uICovCisjZGVmaW5lIFJFQ1ZGUk9NX1RZUEVfUkVUViBpbnQKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBzZW5kIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX1NFTkQKKworLyogRGVmaW5lIHRvIHRoZSB0eXBlIG9mIGFyZyAxIGZvciBzZW5kLiAqLworI2RlZmluZSBTRU5EX1RZUEVfQVJHMSBpbnQKKworLyogRGVmaW5lIHRvIHRoZSB0eXBlIHF1YWxpZmllciBvZiBhcmcgMiBmb3Igc2VuZC4gKi8KKyNkZWZpbmUgU0VORF9RVUFMX0FSRzIKKworLyogRGVmaW5lIHRvIHRoZSB0eXBlIG9mIGFyZyAyIGZvciBzZW5kLiAqLworI2RlZmluZSBTRU5EX1RZUEVfQVJHMiBjaGFyICoKKworLyogRGVmaW5lIHRvIHRoZSB0eXBlIG9mIGFyZyAzIGZvciBzZW5kLiAqLworI2RlZmluZSBTRU5EX1RZUEVfQVJHMyBpbnQKKworLyogRGVmaW5lIHRvIHRoZSB0eXBlIG9mIGFyZyA0IGZvciBzZW5kLiAqLworI2RlZmluZSBTRU5EX1RZUEVfQVJHNCBpbnQKKworLyogRGVmaW5lIHRvIHRoZSBmdW5jdGlvbiByZXR1cm4gdHlwZSBmb3Igc2VuZC4gKi8KKyNkZWZpbmUgU0VORF9UWVBFX1JFVFYgaW50CisKKy8qIERlZmluZSB0byB1c2UgdGhlIFFzb1NTTCBwYWNrYWdlLiAqLworI2RlZmluZSBVU0VfUVNPU1NMCisKKy8qIFVzZSB0aGUgc3lzdGVtIGtleXJpbmcgYXMgdGhlIGRlZmF1bHQgQ0EgYnVuZGxlLiAqLworI2RlZmluZSBDVVJMX0NBX0JVTkRMRSAgIi9RSUJNL1VzZXJEYXRhL0lDU1MvQ2VydC9TZXJ2ZXIvREVGQVVMVC5LREIiCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICBBRERJVElPTkFMIERFRklOSVRJT05TICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyogVGhlIGZvbGxvd2luZyBtdXN0IGJlIGRlZmluZWQgQkVGT1JFIHN5c3RlbSBoZWFkZXIgZmlsZXMgaW5jbHVzaW9uLiAqLworCisjZGVmaW5lIF9fcHRyMTI4ICAgICAgICAgICAgICAgICAgICAgICAvKiBObyB0ZXJhc3BhY2UuICovCisjZGVmaW5lIHFhZHJ0X3VzZV9mcHV0Y19pbmxpbmUgICAgICAgICAvKiBHZW5lcmF0ZSBmcHV0YygpIHdyYXBwZXIgaW5saW5lLiAqLworI2RlZmluZSBxYWRydF91c2VfZnJlYWRfaW5saW5lICAgICAgICAgLyogR2VuZXJhdGUgZnJlYWQoKSB3cmFwcGVyIGlubGluZS4gKi8KKyNkZWZpbmUgcWFkcnRfdXNlX2Z3cml0ZV9pbmxpbmUgICAgICAgIC8qIEdlbmVyYXRlIGZ3cml0ZSgpIHdyYXBwZXIgaW5saW5lLiAqLworCmRpZmYgLS1naXQgYS9saWIvY29uZmlnLXJpc2Nvcy5oIGIvbGliL2NvbmZpZy1yaXNjb3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OGJiNzg4Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2NvbmZpZy1yaXNjb3MuaApAQCAtMCwwICsxLDQ3NSBAQAorLyogY3VybF9jb25maWcuaC5pbi4gIEdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGZyb20gY29uZmlndXJlLmluIGJ5IGF1dG9oZWFkZXIuICAqLworLyogTmFtZSBvZiB0aGlzIHBhY2thZ2UhICovCisjdW5kZWYgUEFDS0FHRQorCisvKiBWZXJzaW9uIG51bWJlciBvZiB0aGlzIGFyY2hpdmUuICovCisjdW5kZWYgVkVSU0lPTgorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGdldHBhc3MgZnVuY3Rpb24uICAqLworI3VuZGVmIEhBVkVfR0VUUEFTUworCisvKiBEZWZpbmUgY3B1LW1hY2hpbmUtT1MgKi8KKyNkZWZpbmUgT1MgIkFSTS1SSVNDIE9TIgorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGdldGhvc3RieWFkZHJfcigpIGZ1bmN0aW9uIHdpdGggNSBhcmd1bWVudHMgKi8KKyN1bmRlZiBIQVZFX0dFVEhPU1RCWUFERFJfUl81CisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgZ2V0aG9zdGJ5YWRkcl9yKCkgZnVuY3Rpb24gd2l0aCA3IGFyZ3VtZW50cyAqLworI3VuZGVmIEhBVkVfR0VUSE9TVEJZQUREUl9SXzcKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBnZXRob3N0YnlhZGRyX3IoKSBmdW5jdGlvbiB3aXRoIDggYXJndW1lbnRzICovCisjdW5kZWYgSEFWRV9HRVRIT1NUQllBRERSX1JfOAorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGdldGhvc3RieW5hbWVfcigpIGZ1bmN0aW9uIHdpdGggMyBhcmd1bWVudHMgKi8KKyN1bmRlZiBIQVZFX0dFVEhPU1RCWU5BTUVfUl8zCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgZ2V0aG9zdGJ5bmFtZV9yKCkgZnVuY3Rpb24gd2l0aCA1IGFyZ3VtZW50cyAqLworI3VuZGVmIEhBVkVfR0VUSE9TVEJZTkFNRV9SXzUKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBnZXRob3N0YnluYW1lX3IoKSBmdW5jdGlvbiB3aXRoIDYgYXJndW1lbnRzICovCisjdW5kZWYgSEFWRV9HRVRIT1NUQllOQU1FX1JfNgorCisvKiBEZWZpbmUgaWYgeW91IG5lZWQgdGhlIF9SRUVOVFJBTlQgZGVmaW5lIGZvciBzb21lIGZ1bmN0aW9ucyAqLworI3VuZGVmIE5FRURfUkVFTlRSQU5UCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgS2VyYmVyb3M0IGxpYnJhcmllcyAoaW5jbHVkaW5nIC1sZGVzKSAqLworI3VuZGVmIEhBVkVfS1JCNAorCisvKiBEZWZpbmUgaWYgeW91IHdhbnQgdG8gZW5hYmxlIElQdjYgc3VwcG9ydCAqLworI3VuZGVmIEVOQUJMRV9JUFY2CisKKy8qIERlZmluZSBpZiBzdHJ1Y3Qgc29ja2FkZHJfaW42IGhhcyB0aGUgc2luNl9zY29wZV9pZCBtZW1iZXIgKi8KKyNkZWZpbmUgSEFWRV9TT0NLQUREUl9JTjZfU0lONl9TQ09QRV9JRCAxCisKKy8qIERlZmluZSB0aGlzIHRvICdpbnQnIGlmIHNzaXplX3QgaXMgbm90IGFuIGF2YWlsYWJsZSB0eXBlZGVmZWQgdHlwZSAqLworI3VuZGVmIHNzaXplX3QKKworLyogRGVmaW5lIHRoaXMgYXMgYSBzdWl0YWJsZSBmaWxlIHRvIHJlYWQgcmFuZG9tIGRhdGEgZnJvbSAqLworI3VuZGVmIFJBTkRPTV9GSUxFCisKKy8qIERlZmluZSB0aGlzIHRvIHlvdXIgRW50cm9weSBHYXRoZXJpbmcgRGFlbW9uIHNvY2tldCBwYXRobmFtZSAqLworI3VuZGVmIEVHRF9TT0NLRVQKKworLyogRGVmaW5lIGlmIHlvdSB3YW50IHRvIGVuYWJsZSBJUHY2IHN1cHBvcnQgKi8KKyN1bmRlZiBFTkFCTEVfSVBWNgorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYWxhcm0gZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfQUxBUk0gMQorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDxhbGxvY2EuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfQUxMT0NBX0gKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8YXJwYS9pbmV0Lmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX0FSUEFfSU5FVF9ICisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgYGNsb3Nlc29ja2V0JyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX0NMT1NFU09DS0VUCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPGNyeXB0by5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX0NSWVBUT19ICisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPGRlcy5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX0RFU19ICisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPGVyci5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX0VSUl9ICisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPGZjbnRsLmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX0ZDTlRMX0gKKworLyogRGVmaW5lIGlmIGdldGFkZHJpbmZvIGV4aXN0cyBhbmQgd29ya3MgKi8KKyNkZWZpbmUgSEFWRV9HRVRBRERSSU5GTworCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGBnZXRldWlkJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX0dFVEVVSUQKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBgZ2V0aG9zdGJ5YWRkcicgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfR0VUSE9TVEJZQUREUgorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGBnZXRob3N0YnlhZGRyX3InIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfR0VUSE9TVEJZQUREUl9SCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgYGdldGhvc3RieW5hbWVfcicgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9HRVRIT1NUQllOQU1FX1IKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBgZ2V0aG9zdG5hbWUnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX0dFVEhPU1ROQU1FCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPGdldG9wdC5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9HRVRPUFRfSAorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGBnZXRwYXNzX3InIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfR0VUUEFTU19SCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgYGdldHB3dWlkJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX0dFVFBXVUlECisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgYGdldHNlcnZieW5hbWUnIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfR0VUU0VSVkJZTkFNRQorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGBnZXR0aW1lb2ZkYXknIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX0dFVFRJTUVPRkRBWQorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGB0aW1ldmFsJyBzdHJ1Y3QuICovCisjZGVmaW5lIEhBVkVfU1RSVUNUX1RJTUVWQUwKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBgaW5ldF9hZGRyJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX0lORVRfQUREUgorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDxpbnR0eXBlcy5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9JTlRUWVBFU19ICisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPGlvLmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX0lPX0gKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBga3JiX2dldF9vdXJfaXBfZm9yX3JlYWxtJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX0tSQl9HRVRfT1VSX0lQX0ZPUl9SRUFMTQorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDxrcmIuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9LUkJfSAorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGBjcnlwdG8nIGxpYnJhcnkgKC1sY3J5cHRvKS4gKi8KKyN1bmRlZiBIQVZFX0xJQkNSWVBUTworCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGBuc2wnIGxpYnJhcnkgKC1sbnNsKS4gKi8KKyN1bmRlZiBIQVZFX0xJQk5TTAorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGByZXNvbHYnIGxpYnJhcnkgKC1scmVzb2x2KS4gKi8KKyN1bmRlZiBIQVZFX0xJQlJFU09MVgorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGByZXNvbHZlJyBsaWJyYXJ5ICgtbHJlc29sdmUpLiAqLworI3VuZGVmIEhBVkVfTElCUkVTT0xWRQorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGBzb2NrZXQnIGxpYnJhcnkgKC1sc29ja2V0KS4gKi8KKyN1bmRlZiBIQVZFX0xJQlNPQ0tFVAorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGBzc2wnIGxpYnJhcnkgKC1sc3NsKS4gKi8KKyN1bmRlZiBIQVZFX0xJQlNTTAorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGB1Y2InIGxpYnJhcnkgKC1sdWNiKS4gKi8KKyN1bmRlZiBIQVZFX0xJQlVDQgorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGBsb2NhbHRpbWVfcicgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9MT0NBTFRJTUVfUgorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDxtYWxsb2MuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfTUFMTE9DX0gKKworLyogRGVmaW5lIGlmIHlvdSBuZWVkIHRoZSBtYWxsb2MuaCBoZWFkZXIgZmlsZSBldmVuIHdpdGggc3RkbGliLmggICovCisvKiAjZGVmaW5lIE5FRURfTUFMTE9DX0ggMSAqLworCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDxtZW1vcnkuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9NRU1PUllfSAorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDxuZXRkYi5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9ORVREQl9ICisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPG5ldGluZXQvaWZfZXRoZXIuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9ORVRJTkVUX0lGX0VUSEVSX0gKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8bmV0aW5ldC9pbi5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9ORVRJTkVUX0lOX0gKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8bmV0L2lmLmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX05FVF9JRl9ICisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPG9wZW5zc2wvY3J5cHRvLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfT1BFTlNTTF9DUllQVE9fSAorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDxvcGVuc3NsL2Vyci5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX09QRU5TU0xfRVJSX0gKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8b3BlbnNzbC9wZW0uaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9PUEVOU1NMX1BFTV9ICisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPG9wZW5zc2wvcnNhLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfT1BFTlNTTF9SU0FfSAorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDxvcGVuc3NsL3NzbC5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX09QRU5TU0xfU1NMX0gKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8b3BlbnNzbC94NTA5Lmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfT1BFTlNTTF9YNTA5X0gKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8cGVtLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfUEVNX0gKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBgcGVycm9yJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX1BFUlJPUgorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDxwd2QuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9QV0RfSAorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGBSQU5EX2VnZCcgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9SQU5EX0VHRAorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGBSQU5EX3NjcmVlbicgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9SQU5EX1NDUkVFTgorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGBSQU5EX3N0YXR1cycgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9SQU5EX1NUQVRVUworCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDxyc2EuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9SU0FfSAorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGBzZWxlY3QnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX1NFTEVDVAorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGBzZXR2YnVmJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX1NFVFZCVUYKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8c2d0dHkuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfU0dUVFlfSAorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGBzaWdhY3Rpb24nIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfU0lHQUNUSU9OCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgYHNpZ25hbCcgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfU0lHTkFMCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPHNpZ25hbC5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9TSUdOQUxfSAorCisvKiBEZWZpbmUgaWYgc2lnX2F0b21pY190IGlzIGFuIGF2YWlsYWJsZSB0eXBlZGVmLiAqLworI2RlZmluZSBIQVZFX1NJR19BVE9NSUNfVAorCisvKiBEZWZpbmUgaWYgc2lnX2F0b21pY190IGlzIGFscmVhZHkgZGVmaW5lZCBhcyB2b2xhdGlsZS4gKi8KKyN1bmRlZiBIQVZFX1NJR19BVE9NSUNfVF9WT0xBVElMRQorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGBzb2NrZXQnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX1NPQ0tFVAorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDxzc2wuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9TU0xfSAorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDxzdGRpbnQuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9TVERJTlRfSAorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDxzdGRsaWIuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfU1RETElCX0gKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBgc3RyY2FzZWNtcCcgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9TVFJDQVNFQ01QCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgYHN0cmNtcGknIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfU1RSQ01QSQorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGBzdHJkdXAnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX1NUUkRVUAorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGBzdHJmdGltZScgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfU1RSRlRJTUUKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBgc3RyaWNtcCcgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfU1RSSUNNUAorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDxzdHJpbmdzLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfU1RSSU5HU19ICisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPHN0cmluZy5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9TVFJJTkdfSAorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGBzdHJsY2F0JyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX1NUUkxDQVQKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBgc3RybGNweScgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9TVFJMQ1BZCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgYHN0cnN0cicgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfU1RSU1RSCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgYHN0cnRva19yJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX1NUUlRPS19SCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgYHN0cnRvbGwnIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfU1RSVE9MTAorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDxzeXMvcGFyYW0uaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9TWVNfUEFSQU1fSAorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDxzeXMvc2VsZWN0Lmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfU1lTX1NFTEVDVF9ICisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy9zb2NrZXQuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfU1lTX1NPQ0tFVF9ICisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy9zb2NraW8uaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9TWVNfU09DS0lPX0gKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3N0YXQuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9TWVNfU1RBVF9ICisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy90aW1lLmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX1NZU19USU1FX0gKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3R5cGVzLmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX1NZU19UWVBFU19ICisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgYHRjZ2V0YXR0cicgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfVENHRVRBVFRSCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgYHRjc2V0YXR0cicgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfVENTRVRBVFRSCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPHRlcm1pb3MuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfVEVSTUlPU19ICisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPHRlcm1pby5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX1RFUk1JT19ICisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPHRpbWUuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9USU1FX0gKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBgdW5hbWUnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX1VOQU1FCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPHVuaXN0ZC5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9VTklTVERfSAorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDx3aW5zb2NrLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfV0lOU09DS19ICisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPHg1MDkuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9YNTA5X0gKKworLyogTmFtZSBvZiBwYWNrYWdlICovCisjdW5kZWYgUEFDS0FHRQorCisvKiBEZWZpbmUgYXMgdGhlIHJldHVybiB0eXBlIG9mIHNpZ25hbCBoYW5kbGVycyAoYGludCcgb3IgYHZvaWQnKS4gKi8KKyNkZWZpbmUgUkVUU0lHVFlQRSB2b2lkCisKKy8qIFRoZSBzaXplIG9mIGBpbnQnLCBhcyBjb21wdXRlZCBieSBzaXplb2YuICovCisjZGVmaW5lIFNJWkVPRl9JTlQgNAorCisvKiBUaGUgc2l6ZSBvZiBgbG9uZyBkb3VibGUnLCBhcyBjb21wdXRlZCBieSBzaXplb2YuICovCisjdW5kZWYgU0laRU9GX0xPTkdfRE9VQkxFCisKKy8qIFRoZSBzaXplIG9mIGBsb25nIGxvbmcnLCBhcyBjb21wdXRlZCBieSBzaXplb2YuICovCisjdW5kZWYgU0laRU9GX0xPTkdfTE9ORworCisvKiBUaGUgc2l6ZSBvZiBgc2hvcnQnLCBhcyBjb21wdXRlZCBieSBzaXplb2YuICovCisjZGVmaW5lIFNJWkVPRl9TSE9SVCAyCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgQU5TSSBDIGhlYWRlciBmaWxlcy4gKi8KKyN1bmRlZiBTVERDX0hFQURFUlMKKworLyogRGVmaW5lIGlmIHlvdSBjYW4gc2FmZWx5IGluY2x1ZGUgYm90aCA8c3lzL3RpbWUuaD4gYW5kIDx0aW1lLmg+LiAqLworI3VuZGVmIFRJTUVfV0lUSF9TWVNfVElNRQorCisvKiBWZXJzaW9uIG51bWJlciBvZiBwYWNrYWdlICovCisjdW5kZWYgVkVSU0lPTgorCisvKiBEZWZpbmUgaWYgb24gQUlYIDMuCisgICBTeXN0ZW0gaGVhZGVycyBzb21ldGltZXMgZGVmaW5lIHRoaXMuCisgICBXZSBqdXN0IHdhbnQgdG8gYXZvaWQgYSByZWRlZmluaXRpb24gZXJyb3IgbWVzc2FnZS4gICovCisjaWZuZGVmIF9BTExfU09VUkNFCisjIHVuZGVmIF9BTExfU09VUkNFCisjZW5kaWYKKworLyogTnVtYmVyIG9mIGJpdHMgaW4gYSBmaWxlIG9mZnNldCwgb24gaG9zdHMgd2hlcmUgdGhpcyBpcyBzZXR0YWJsZS4gKi8KKyN1bmRlZiBfRklMRV9PRkZTRVRfQklUUworCisvKiBEZWZpbmUgZm9yIGxhcmdlIGZpbGVzLCBvbiBBSVgtc3R5bGUgaG9zdHMuICovCisjdW5kZWYgX0xBUkdFX0ZJTEVTCisKKy8qIERlZmluZSB0byBlbXB0eSBpZiBgY29uc3QnIGRvZXMgbm90IGNvbmZvcm0gdG8gQU5TSSBDLiAqLworI3VuZGVmIGNvbnN0CisKKy8qIERlZmluZSB0byBgdW5zaWduZWQnIGlmIDxzeXMvdHlwZXMuaD4gZG9lcyBub3QgZGVmaW5lLiAqLworI3VuZGVmIHNpemVfdAorCisvKiBEZWZpbmUgdG8gYGludCcgaWYgPHN5cy90eXBlcy5oPiBkb2VzIG5vdCBkZWZpbmUuICovCisjdW5kZWYgc3NpemVfdAorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGlvY3RsIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX0lPQ1RMCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSBhIHdvcmtpbmcgaW9jdGwgRklPTkJJTyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9JT0NUTF9GSU9OQklPCisKKy8qIHRvIGRpc2FibGUgTERBUCAqLworI2RlZmluZSBDVVJMX0RJU0FCTEVfTERBUAorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGdldG5hbWVpbmZvIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX0dFVE5BTUVJTkZPIDEKKworLyogRGVmaW5lIHRvIHRoZSB0eXBlIHF1YWxpZmllciBvZiBhcmcgMSBmb3IgZ2V0bmFtZWluZm8uICovCisjZGVmaW5lIEdFVE5BTUVJTkZPX1FVQUxfQVJHMSBjb25zdAorCisvKiBEZWZpbmUgdG8gdGhlIHR5cGUgb2YgYXJnIDEgZm9yIGdldG5hbWVpbmZvLiAqLworI2RlZmluZSBHRVROQU1FSU5GT19UWVBFX0FSRzEgc3RydWN0IHNvY2thZGRyICoKKworLyogRGVmaW5lIHRvIHRoZSB0eXBlIG9mIGFyZyAyIGZvciBnZXRuYW1laW5mby4gKi8KKyNkZWZpbmUgR0VUTkFNRUlORk9fVFlQRV9BUkcyIHNvY2tsZW5fdAorCisvKiBEZWZpbmUgdG8gdGhlIHR5cGUgb2YgYXJncyA0IGFuZCA2IGZvciBnZXRuYW1laW5mby4gKi8KKyNkZWZpbmUgR0VUTkFNRUlORk9fVFlQRV9BUkc0NiBzaXplX3QKKworLyogRGVmaW5lIHRvIHRoZSB0eXBlIG9mIGFyZyA3IGZvciBnZXRuYW1laW5mby4gKi8KKyNkZWZpbmUgR0VUTkFNRUlORk9fVFlQRV9BUkc3IGludAorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIHJlY3YgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfUkVDViAxCisKKy8qIERlZmluZSB0byB0aGUgdHlwZSBvZiBhcmcgMSBmb3IgcmVjdi4gKi8KKyNkZWZpbmUgUkVDVl9UWVBFX0FSRzEgaW50CisKKy8qIERlZmluZSB0byB0aGUgdHlwZSBvZiBhcmcgMiBmb3IgcmVjdi4gKi8KKyNkZWZpbmUgUkVDVl9UWVBFX0FSRzIgdm9pZCAqCisKKy8qIERlZmluZSB0byB0aGUgdHlwZSBvZiBhcmcgMyBmb3IgcmVjdi4gKi8KKyNkZWZpbmUgUkVDVl9UWVBFX0FSRzMgc2l6ZV90CisKKy8qIERlZmluZSB0byB0aGUgdHlwZSBvZiBhcmcgNCBmb3IgcmVjdi4gKi8KKyNkZWZpbmUgUkVDVl9UWVBFX0FSRzQgaW50CisKKy8qIERlZmluZSB0byB0aGUgZnVuY3Rpb24gcmV0dXJuIHR5cGUgZm9yIHJlY3YuICovCisjZGVmaW5lIFJFQ1ZfVFlQRV9SRVRWIHNzaXplX3QKKworLyogRGVmaW5lIDEgaWYgeW91IGhhdmUgdGhlIHJlY3Zmcm9tIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX1JFQ1ZGUk9NIDEKKworLyogRGVmaW5lIHRvIHRoZSB0eXBlIG9mIGFyZyAxIGZvciByZWN2ZnJvbS4gKi8KKyNkZWZpbmUgUkVDVkZST01fVFlQRV9BUkcxIGludAorCisvKiBEZWZpbmUgdG8gdGhlIHR5cGUgcG9pbnRlZCBieSBhcmcgMiBmb3IgcmVjdmZyb20uICovCisjZGVmaW5lIFJFQ1ZGUk9NX1RZUEVfQVJHMiB2b2lkCisKKy8qIERlZmluZSB0byAxIGlmIHRoZSB0eXBlIHBvaW50ZWQgYnkgYXJnIDIgZm9yIHJlY3Zmcm9tIGlzIHZvaWQuICovCisjZGVmaW5lIFJFQ1ZGUk9NX1RZUEVfQVJHMl9JU19WT0lEIDEKKworLyogRGVmaW5lIHRvIHRoZSB0eXBlIG9mIGFyZyAzIGZvciByZWN2ZnJvbS4gKi8KKyNkZWZpbmUgUkVDVkZST01fVFlQRV9BUkczIHNpemVfdAorCisvKiBEZWZpbmUgdG8gdGhlIHR5cGUgb2YgYXJnIDQgZm9yIHJlY3Zmcm9tLiAqLworI2RlZmluZSBSRUNWRlJPTV9UWVBFX0FSRzQgaW50CisKKy8qIERlZmluZSB0byB0aGUgdHlwZSBwb2ludGVkIGJ5IGFyZyA1IGZvciByZWN2ZnJvbS4gKi8KKyNkZWZpbmUgUkVDVkZST01fVFlQRV9BUkc1IHN0cnVjdCBzb2NrYWRkcgorCisvKiBEZWZpbmUgdG8gdGhlIHR5cGUgcG9pbnRlZCBieSBhcmcgNiBmb3IgcmVjdmZyb20uICovCisjZGVmaW5lIFJFQ1ZGUk9NX1RZUEVfQVJHNiBpbnQKKworLyogRGVmaW5lIHRvIHRoZSBmdW5jdGlvbiByZXR1cm4gdHlwZSBmb3IgcmVjdmZyb20uICovCisjZGVmaW5lIFJFQ1ZGUk9NX1RZUEVfUkVUViBzc2l6ZV90CisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgc2VuZCBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9TRU5EIDEKKworLyogRGVmaW5lIHRvIHRoZSB0eXBlIG9mIGFyZyAxIGZvciBzZW5kLiAqLworI2RlZmluZSBTRU5EX1RZUEVfQVJHMSBpbnQKKworLyogRGVmaW5lIHRvIHRoZSB0eXBlIHF1YWxpZmllciBvZiBhcmcgMiBmb3Igc2VuZC4gKi8KKyNkZWZpbmUgU0VORF9RVUFMX0FSRzIgY29uc3QKKworLyogRGVmaW5lIHRvIHRoZSB0eXBlIG9mIGFyZyAyIGZvciBzZW5kLiAqLworI2RlZmluZSBTRU5EX1RZUEVfQVJHMiB2b2lkICoKKworLyogRGVmaW5lIHRvIHRoZSB0eXBlIG9mIGFyZyAzIGZvciBzZW5kLiAqLworI2RlZmluZSBTRU5EX1RZUEVfQVJHMyBzaXplX3QKKworLyogRGVmaW5lIHRvIHRoZSB0eXBlIG9mIGFyZyA0IGZvciBzZW5kLiAqLworI2RlZmluZSBTRU5EX1RZUEVfQVJHNCBpbnQKKworLyogRGVmaW5lIHRvIHRoZSBmdW5jdGlvbiByZXR1cm4gdHlwZSBmb3Igc2VuZC4gKi8KKyNkZWZpbmUgU0VORF9UWVBFX1JFVFYgc3NpemVfdApkaWZmIC0tZ2l0IGEvbGliL2N1cmxfY29uZmlnLmggYi9saWIvY29uZmlnLXN5bWJpYW4uaApzaW1pbGFyaXR5IGluZGV4IDYxJQpjb3B5IGZyb20gbGliL2N1cmxfY29uZmlnLmgKY29weSB0byBsaWIvY29uZmlnLXN5bWJpYW4uaAppbmRleCAwYTBlNjI2Li45ZjhiNzRhIDEwMDY0NAotLS0gYS9saWIvY3VybF9jb25maWcuaAorKysgYi9saWIvY29uZmlnLXN5bWJpYW4uaApAQCAtMSwxMSArMSwxMCBAQAotLyogbGliL2N1cmxfY29uZmlnLmguICBHZW5lcmF0ZWQgZnJvbSBjdXJsX2NvbmZpZy5oLmluIGJ5IGNvbmZpZ3VyZS4gICovCi0vKiBsaWIvY3VybF9jb25maWcuaC5pbi4gIEdlbmVyYXRlZCBmcm9tIGNvbmZpZ3VyZS5hYyBieSBhdXRvaGVhZGVyLiAgKi8KKy8qIGNvbmZpZy1zeW1iaWFuLmguICBNYW51YWxseSBnZW5lcmF0ZWQuICAqLwogCiAvKiB3aGVuIGJ1aWxkaW5nIGxpYmN1cmwgaXRzZWxmICovCiAvKiAjdW5kZWYgQlVJTERJTkdfTElCQ1VSTCAqLwogCiAvKiBMb2NhdGlvbiBvZiBkZWZhdWx0IGNhIGJ1bmRsZSAqLwotI2RlZmluZSBDVVJMX0NBX0JVTkRMRSAiL2V0Yy9zc2wvY2VydHMvY2EtY2VydGlmaWNhdGVzLmNydCIKKy8qICNkZWZpbmUgQ1VSTF9DQV9CVU5ETEUgIi9ldGMvcGtpL3Rscy9jZXJ0cy9jYS1idW5kbGUuY3J0IiovCiAKIC8qIExvY2F0aW9uIG9mIGRlZmF1bHQgY2EgcGF0aCAqLwogLyogI3VuZGVmIENVUkxfQ0FfUEFUSCAqLwpAQCAtMjgsMjcgKzI3LDEyIEBACiAvKiB0byBkaXNhYmxlIEhUVFAgKi8KIC8qICN1bmRlZiBDVVJMX0RJU0FCTEVfSFRUUCAqLwogCi0vKiB0byBkaXNhYmxlIElNQVAgKi8KLS8qICN1bmRlZiBDVVJMX0RJU0FCTEVfSU1BUCAqLwotCiAvKiB0byBkaXNhYmxlIExEQVAgKi8KICNkZWZpbmUgQ1VSTF9ESVNBQkxFX0xEQVAgMQogCiAvKiB0byBkaXNhYmxlIExEQVBTICovCiAjZGVmaW5lIENVUkxfRElTQUJMRV9MREFQUyAxCiAKLS8qIHRvIGRpc2FibGUgUE9QMyAqLwotLyogI3VuZGVmIENVUkxfRElTQUJMRV9QT1AzICovCi0KLS8qIHRvIGRpc2FibGUgcHJveGllcyAqLwotLyogI3VuZGVmIENVUkxfRElTQUJMRV9QUk9YWSAqLwotCi0vKiB0byBkaXNhYmxlIFJUU1AgKi8KLS8qICN1bmRlZiBDVVJMX0RJU0FCTEVfUlRTUCAqLwotCi0vKiB0byBkaXNhYmxlIFNNVFAgKi8KLS8qICN1bmRlZiBDVVJMX0RJU0FCTEVfU01UUCAqLwotCiAvKiB0byBkaXNhYmxlIFRFTE5FVCAqLwogLyogI3VuZGVmIENVUkxfRElTQUJMRV9URUxORVQgKi8KIApAQCAtNTYsMTggKzQwLDE1IEBACiAvKiAjdW5kZWYgQ1VSTF9ESVNBQkxFX1RGVFAgKi8KIAogLyogdG8gZGlzYWJsZSB2ZXJib3NlIHN0cmluZ3MgKi8KLS8qICN1bmRlZiBDVVJMX0RJU0FCTEVfVkVSQk9TRV9TVFJJTkdTICovCisvKiAjZGVmaW5lIENVUkxfRElTQUJMRV9WRVJCT1NFX1NUUklOR1MgMSovCiAKIC8qIHRvIG1ha2UgYSBzeW1ib2wgdmlzaWJsZSAqLwotLyogI3VuZGVmIENVUkxfRVhURVJOX1NZTUJPTCAqLworLyojZGVmaW5lIENVUkxfRVhURVJOX1NZTUJPTCAgX19kZWNsc3BlYyhkbGxleHBvcnQpKi8KIAogLyogdG8gZW5hYmxlIGhpZGRlbiBzeW1ib2xzICovCi0vKiAjdW5kZWYgQ1VSTF9ISURERU5fU1lNQk9MUyAqLworLyojZGVmaW5lIENVUkxfSElEREVOX1NZTUJPTFMgMSovCiAKLS8qIFckIExEQVAgd2l0aCBub24tVyQgY29tcGlsZXIgKi8KLS8qICN1bmRlZiBDVVJMX0xEQVBfSFlCUklEICovCi0KLS8qIFVzZSBXJCBMREFQIGltcGxlbWVudGF0aW9uICovCisvKiBVc2UgV2luZG93cyBMREFQIGltcGxlbWVudGF0aW9uICovCiAvKiAjdW5kZWYgQ1VSTF9MREFQX1dJTiAqLwogCiAvKiB3aGVuIG5vdCBidWlsZGluZyBhIHNoYXJlZCBsaWJyYXJ5ICovCkBAIC03OSw2ICs2MCw5IEBACiAvKiBEZWZpbmUgaWYgeW91IHdhbnQgdG8gZW5hYmxlIElQdjYgc3VwcG9ydCAqLwogI2RlZmluZSBFTkFCTEVfSVBWNiAxCiAKKy8qIERlZmluZSBpZiBzdHJ1Y3Qgc29ja2FkZHJfaW42IGhhcyB0aGUgc2luNl9zY29wZV9pZCBtZW1iZXIgKi8KKyNkZWZpbmUgSEFWRV9TT0NLQUREUl9JTjZfU0lONl9TQ09QRV9JRCAxCisKIC8qIERlZmluZSB0byB0aGUgdHlwZSBxdWFsaWZpZXIgb2YgYXJnIDEgZm9yIGdldG5hbWVpbmZvLiAqLwogI2RlZmluZSBHRVROQU1FSU5GT19RVUFMX0FSRzEgY29uc3QKIApAQCAtODksNTIgKzczLDM0IEBACiAjZGVmaW5lIEdFVE5BTUVJTkZPX1RZUEVfQVJHMiBzb2NrbGVuX3QKIAogLyogRGVmaW5lIHRvIHRoZSB0eXBlIG9mIGFyZ3MgNCBhbmQgNiBmb3IgZ2V0bmFtZWluZm8uICovCi0jZGVmaW5lIEdFVE5BTUVJTkZPX1RZUEVfQVJHNDYgc29ja2xlbl90CisjZGVmaW5lIEdFVE5BTUVJTkZPX1RZUEVfQVJHNDYgc2l6ZV90CiAKIC8qIERlZmluZSB0byB0aGUgdHlwZSBvZiBhcmcgNyBmb3IgZ2V0bmFtZWluZm8uICovCi0jZGVmaW5lIEdFVE5BTUVJTkZPX1RZUEVfQVJHNyB1bnNpZ25lZCBpbnQKLQotLyogU3BlY2lmaWVzIHRoZSBudW1iZXIgb2YgYXJndW1lbnRzIHRvIGdldHNlcnZieXBvcnRfciAqLwotI2RlZmluZSBHRVRTRVJWQllQT1JUX1JfQVJHUyA2Ci0KLS8qIFNwZWNpZmllcyB0aGUgc2l6ZSBvZiB0aGUgYnVmZmVyIHRvIHBhc3MgdG8gZ2V0c2VydmJ5cG9ydF9yICovCi0jZGVmaW5lIEdFVFNFUlZCWVBPUlRfUl9CVUZTSVpFIDQwOTYKLQotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGFsYXJtIGZ1bmN0aW9uLiAqLwotI2RlZmluZSBIQVZFX0FMQVJNIDEKKyNkZWZpbmUgR0VUTkFNRUlORk9fVFlQRV9BUkc3IGludAogCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGFsbG9jYS5oPiBoZWFkZXIgZmlsZS4gKi8KLSNkZWZpbmUgSEFWRV9BTExPQ0FfSCAxCisvKiNkZWZpbmUgSEFWRV9BTExPQ0FfSCAxKi8KIAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxhcnBhL2luZXQuaD4gaGVhZGVyIGZpbGUuICovCiAjZGVmaW5lIEhBVkVfQVJQQV9JTkVUX0ggMQogCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGFycGEvdGZ0cC5oPiBoZWFkZXIgZmlsZS4gKi8KLSNkZWZpbmUgSEFWRV9BUlBBX1RGVFBfSCAxCisvKiNkZWZpbmUgSEFWRV9BUlBBX1RGVFBfSCAxKi8KIAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxhc3NlcnQuaD4gaGVhZGVyIGZpbGUuICovCiAjZGVmaW5lIEhBVkVfQVNTRVJUX0ggMQogCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYmFzZW5hbWUgZnVuY3Rpb24uICovCi0jZGVmaW5lIEhBVkVfQkFTRU5BTUUgMQorLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBiYXNlbmFtZScgZnVuY3Rpb24uICovCisvKiNkZWZpbmUgSEFWRV9CQVNFTkFNRSAxKi8KIAogLyogRGVmaW5lIHRvIDEgaWYgYm9vbCBpcyBhbiBhdmFpbGFibGUgdHlwZS4gKi8KLSNkZWZpbmUgSEFWRV9CT09MX1QgMQorLyojZGVmaW5lIEhBVkVfQk9PTF9UIDEqLwogCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgY2xvY2tfZ2V0dGltZSBmdW5jdGlvbiBhbmQgbW9ub3RvbmljIHRpbWVyLiAqLwotI2RlZmluZSBIQVZFX0NMT0NLX0dFVFRJTUVfTU9OT1RPTklDIDEKLQotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGNsb3Nlc29ja2V0IGZ1bmN0aW9uLiAqLworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBjbG9zZXNvY2tldCcgZnVuY3Rpb24uICovCiAvKiAjdW5kZWYgSEFWRV9DTE9TRVNPQ0tFVCAqLwogCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgQ2xvc2VTb2NrZXQgY2FtZWwgY2FzZSBmdW5jdGlvbi4gKi8KLS8qICN1bmRlZiBIQVZFX0NMT1NFU09DS0VUX0NBTUVMICovCi0KLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBjb25uZWN0IGZ1bmN0aW9uLiAqLwotI2RlZmluZSBIQVZFX0NPTk5FQ1QgMQotCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYENSWVBUT19jbGVhbnVwX2FsbF9leF9kYXRhJyBmdW5jdGlvbi4gKi8KLSNkZWZpbmUgSEFWRV9DUllQVE9fQ0xFQU5VUF9BTExfRVhfREFUQSAxCisvKiNkZWZpbmUgSEFWRV9DUllQVE9fQ0xFQU5VUF9BTExfRVhfREFUQSAxKi8KIAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxjcnlwdG8uaD4gaGVhZGVyIGZpbGUuICovCiAvKiAjdW5kZWYgSEFWRV9DUllQVE9fSCAqLwpAQCAtMTQ1LDcyICsxMTEsNDQgQEAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8ZGxmY24uaD4gaGVhZGVyIGZpbGUuICovCiAjZGVmaW5lIEhBVkVfRExGQ05fSCAxCiAKLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgRU5HSU5FX2NsZWFudXAnIGZ1bmN0aW9uLiAqLwotLy8jZGVmaW5lIEhBVkVfRU5HSU5FX0NMRUFOVVAgMQotCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYEVOR0lORV9sb2FkX2J1aWx0aW5fZW5naW5lcycgZnVuY3Rpb24uICovCi0vLyNkZWZpbmUgSEFWRV9FTkdJTkVfTE9BRF9CVUlMVElOX0VOR0lORVMgMQorLyojZGVmaW5lIEhBVkVfRU5HSU5FX0xPQURfQlVJTFRJTl9FTkdJTkVTIDEqLwogCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGVycm5vLmg+IGhlYWRlciBmaWxlLiAqLwogI2RlZmluZSBIQVZFX0VSUk5PX0ggMQogCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGVyci5oPiBoZWFkZXIgZmlsZS4gKi8KLS8qICN1bmRlZiBIQVZFX0VSUl9IICovCi0KLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBmY250bCBmdW5jdGlvbi4gKi8KLSNkZWZpbmUgSEFWRV9GQ05UTCAxCisjZGVmaW5lIEhBVkVfRVJSX0ggMQogCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGZjbnRsLmg+IGhlYWRlciBmaWxlLiAqLwogI2RlZmluZSBIQVZFX0ZDTlRMX0ggMQogCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgZmNudGwgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfRkNOVEwgMQorCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSBhIHdvcmtpbmcgZmNudGwgT19OT05CTE9DSyBmdW5jdGlvbi4gKi8KICNkZWZpbmUgSEFWRV9GQ05UTF9PX05PTkJMT0NLIDEKIAotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGZkb3BlbiBmdW5jdGlvbi4gKi8KLSNkZWZpbmUgSEFWRV9GRE9QRU4gMQotCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGZvcmsnIGZ1bmN0aW9uLiAqLwotI2RlZmluZSBIQVZFX0ZPUksgMQorLyojZGVmaW5lIEhBVkVfRk9SSyAxKi8KIAotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGZyZWVhZGRyaW5mbyBmdW5jdGlvbi4gKi8KLSNkZWZpbmUgSEFWRV9GUkVFQUREUklORk8gMQotCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgZnJlZWlmYWRkcnMgZnVuY3Rpb24uICovCi0vLyBub3QgaW4gYmlvbmljCi0vLyNkZWZpbmUgSEFWRV9GUkVFSUZBRERSUyAxCi0KLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBmdHJ1bmNhdGUgZnVuY3Rpb24uICovCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGZ0cnVuY2F0ZScgZnVuY3Rpb24uICovCiAjZGVmaW5lIEhBVkVfRlRSVU5DQVRFIDEKIAotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgYSB3b3JraW5nIGdldGFkZHJpbmZvIGZ1bmN0aW9uLiAqLworLyogRGVmaW5lIGlmIGdldGFkZHJpbmZvIGV4aXN0cyBhbmQgd29ya3MgKi8KICNkZWZpbmUgSEFWRV9HRVRBRERSSU5GTyAxCiAKLS8qIERlZmluZSB0byAxIGlmIHRoZSBnZXRhZGRyaW5mbyBmdW5jdGlvbiBpcyB0aHJlYWRzYWZlLiAqLwotI2RlZmluZSBIQVZFX0dFVEFERFJJTkZPX1RIUkVBRFNBRkUgMQotCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGdldGV1aWQnIGZ1bmN0aW9uLiAqLwogI2RlZmluZSBIQVZFX0dFVEVVSUQgMQogCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgZ2V0aG9zdGJ5YWRkciBmdW5jdGlvbi4gKi8KKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZ2V0aG9zdGJ5YWRkcicgZnVuY3Rpb24uICovCiAjZGVmaW5lIEhBVkVfR0VUSE9TVEJZQUREUiAxCiAKLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBnZXRob3N0YnlhZGRyX3IgZnVuY3Rpb24uICovCi0jZGVmaW5lIEhBVkVfR0VUSE9TVEJZQUREUl9SIDEKLQotLyogZ2V0aG9zdGJ5YWRkcl9yKCkgdGFrZXMgNSBhcmdzICovCi0vKiAjdW5kZWYgSEFWRV9HRVRIT1NUQllBRERSX1JfNSAqLwotCi0vKiBnZXRob3N0YnlhZGRyX3IoKSB0YWtlcyA3IGFyZ3MgKi8KLS8qICN1bmRlZiBIQVZFX0dFVEhPU1RCWUFERFJfUl83ICovCi0KLS8qIGdldGhvc3RieWFkZHJfcigpIHRha2VzIDggYXJncyAqLwotI2RlZmluZSBIQVZFX0dFVEhPU1RCWUFERFJfUl84IDEKLQotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGdldGhvc3RieW5hbWUgZnVuY3Rpb24uICovCisvKiBJZiB5b3UgaGF2ZSBnZXRob3N0YnluYW1lICovCiAjZGVmaW5lIEhBVkVfR0VUSE9TVEJZTkFNRSAxCiAKLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBnZXRob3N0YnluYW1lX3IgZnVuY3Rpb24uICovCi0jZGVmaW5lIEhBVkVfR0VUSE9TVEJZTkFNRV9SIDEKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZ2V0aG9zdGJ5bmFtZV9yJyBmdW5jdGlvbi4gKi8KKy8qICN1bmRlZiBIQVZFX0dFVEhPU1RCWU5BTUVfUiAqLwogCiAvKiBnZXRob3N0YnluYW1lX3IoKSB0YWtlcyAzIGFyZ3MgKi8KIC8qICN1bmRlZiBIQVZFX0dFVEhPU1RCWU5BTUVfUl8zICovCkBAIC0yMTksMTQgKzE1Nyw3IEBACiAvKiAjdW5kZWYgSEFWRV9HRVRIT1NUQllOQU1FX1JfNSAqLwogCiAvKiBnZXRob3N0YnluYW1lX3IoKSB0YWtlcyA2IGFyZ3MgKi8KLSNkZWZpbmUgSEFWRV9HRVRIT1NUQllOQU1FX1JfNiAxCi0KLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBnZXRob3N0bmFtZSBmdW5jdGlvbi4gKi8KLSNkZWZpbmUgSEFWRV9HRVRIT1NUTkFNRSAxCi0KLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIGEgd29ya2luZyBnZXRpZmFkZHJzIGZ1bmN0aW9uLiAqLwotLy8gbm90IGluIGJpb25pYwotLy8jZGVmaW5lIEhBVkVfR0VUSUZBRERSUyAxCisvKiAjdW5kZWYgSEFWRV9HRVRIT1NUQllOQU1FX1JfNiAqLwogCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgZ2V0bmFtZWluZm8gZnVuY3Rpb24uICovCiAjZGVmaW5lIEhBVkVfR0VUTkFNRUlORk8gMQpAQCAtMjQ0LDE4ICsxNzUsMTUgQEAKICNkZWZpbmUgSEFWRV9HRVRQV1VJRCAxCiAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZ2V0cmxpbWl0JyBmdW5jdGlvbi4gKi8KLSNkZWZpbmUgSEFWRV9HRVRSTElNSVQgMQotCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgZ2V0c2VydmJ5cG9ydF9yIGZ1bmN0aW9uLiAqLwotI2RlZmluZSBIQVZFX0dFVFNFUlZCWVBPUlRfUiAxCisvKiNkZWZpbmUgSEFWRV9HRVRSTElNSVQgMSovCiAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZ2V0dGltZW9mZGF5JyBmdW5jdGlvbi4gKi8KICNkZWZpbmUgSEFWRV9HRVRUSU1FT0ZEQVkgMQogCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSBhIHdvcmtpbmcgZ2xpYmMtc3R5bGUgc3RyZXJyb3JfciBmdW5jdGlvbi4gKi8KKy8qIHdlIGhhdmUgYSBnbGliYy1zdHlsZSBzdHJlcnJvcl9yKCkgKi8KIC8qICN1bmRlZiBIQVZFX0dMSUJDX1NUUkVSUk9SX1IgKi8KIAotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgYSB3b3JraW5nIGdtdGltZV9yIGZ1bmN0aW9uLiAqLworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBnbXRpbWVfcicgZnVuY3Rpb24uICovCiAjZGVmaW5lIEhBVkVfR01USU1FX1IgMQogCiAvKiBpZiB5b3UgaGF2ZSB0aGUgZ3NzYXBpIGxpYnJhcmllcyAqLwpAQCAtMjgwLDYyICsyMDgsNDMgQEAKIC8qICN1bmRlZiBIQVZFX0dTU01JVCAqLwogCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGlkbmFfc3RyZXJyb3InIGZ1bmN0aW9uLiAqLwotLyogI3VuZGVmIEhBVkVfSUROQV9TVFJFUlJPUiAqLworLyojZGVmaW5lIEhBVkVfSUROQV9TVFJFUlJPUiAxKi8KIAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBpZG5fZnJlZScgZnVuY3Rpb24uICovCi0vKiAjdW5kZWYgSEFWRV9JRE5fRlJFRSAqLworLyojZGVmaW5lIEhBVkVfSUROX0ZSRUUgMSovCiAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8aWRuLWZyZWUuaD4gaGVhZGVyIGZpbGUuICovCi0vKiAjdW5kZWYgSEFWRV9JRE5fRlJFRV9IICovCi0KLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8aWZhZGRycy5oPiBoZWFkZXIgZmlsZS4gKi8KLS8vIG5vdCBpbiBiaW9uaWMKLS8vICNkZWZpbmUgSEFWRV9JRkFERFJTX0ggMQorLyojZGVmaW5lIEhBVkVfSUROX0ZSRUVfSCAxKi8KIAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBpbmV0X2FkZHInIGZ1bmN0aW9uLiAqLwotI2RlZmluZSBIQVZFX0lORVRfQUREUiAxCi0KLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBpbmV0X250b2FfciBmdW5jdGlvbi4gKi8KLS8qICN1bmRlZiBIQVZFX0lORVRfTlRPQV9SICovCi0KLS8qIGluZXRfbnRvYV9yKCkgdGFrZXMgMiBhcmdzICovCi0vKiAjdW5kZWYgSEFWRV9JTkVUX05UT0FfUl8yICovCi0KLS8qIGluZXRfbnRvYV9yKCkgdGFrZXMgMyBhcmdzICovCi0vKiAjdW5kZWYgSEFWRV9JTkVUX05UT0FfUl8zICovCisvKiNkZWZpbmUgSEFWRV9JTkVUX0FERFIgMSovCiAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIGEgSVB2NiBjYXBhYmxlIHdvcmtpbmcgaW5ldF9udG9wIGZ1bmN0aW9uLiAqLwotI2RlZmluZSBIQVZFX0lORVRfTlRPUCAxCisvKiNkZWZpbmUgSEFWRV9JTkVUX05UT1AgMSovCiAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIGEgSVB2NiBjYXBhYmxlIHdvcmtpbmcgaW5ldF9wdG9uIGZ1bmN0aW9uLiAqLwotI2RlZmluZSBIQVZFX0lORVRfUFRPTiAxCisvKiNkZWZpbmUgSEFWRV9JTkVUX1BUT04gMSovCiAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8aW50dHlwZXMuaD4gaGVhZGVyIGZpbGUuICovCiAjZGVmaW5lIEhBVkVfSU5UVFlQRVNfSCAxCiAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBpb2N0bCBmdW5jdGlvbi4gKi8KLS8vIERlZmluZWQgYnkgQW5kcm9pZENvbmZpZy5oIHRoYXQgaXMgYXV0b210aWNhbHkgaW5jbHVkZWQgaW4gYnVpbGRzCi0jdW5kZWYgSEFWRV9JT0NUTAogI2RlZmluZSBIQVZFX0lPQ1RMIDEKIAotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGlvY3Rsc29ja2V0IGZ1bmN0aW9uLiAqLwotLyogI3VuZGVmIEhBVkVfSU9DVExTT0NLRVQgKi8KLQotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIElvY3RsU29ja2V0IGNhbWVsIGNhc2UgZnVuY3Rpb24uICovCi0vKiAjdW5kZWYgSEFWRV9JT0NUTFNPQ0tFVF9DQU1FTCAqLwotCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSBhIHdvcmtpbmcgSW9jdGxTb2NrZXQgY2FtZWwgY2FzZSBGSU9OQklPIGZ1bmN0aW9uLgotICAgKi8KLS8qICN1bmRlZiBIQVZFX0lPQ1RMU09DS0VUX0NBTUVMX0ZJT05CSU8gKi8KLQotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgYSB3b3JraW5nIGlvY3Rsc29ja2V0IEZJT05CSU8gZnVuY3Rpb24uICovCi0vKiAjdW5kZWYgSEFWRV9JT0NUTFNPQ0tFVF9GSU9OQklPICovCi0KIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIGEgd29ya2luZyBpb2N0bCBGSU9OQklPIGZ1bmN0aW9uLiAqLwogI2RlZmluZSBIQVZFX0lPQ1RMX0ZJT05CSU8gMQogCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSBhIHdvcmtpbmcgaW9jdGwgU0lPQ0dJRkFERFIgZnVuY3Rpb24uICovCi0jZGVmaW5lIEhBVkVfSU9DVExfU0lPQ0dJRkFERFIgMQorLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGlvY3Rsc29ja2V0IGZ1bmN0aW9uLiAqLworLyogI3VuZGVmIEhBVkVfSU9DVExTT0NLRVQgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgYSB3b3JraW5nIGlvY3Rsc29ja2V0IEZJT05CSU8gZnVuY3Rpb24uICovCisvKiAjdW5kZWYgSEFWRV9JT0NUTFNPQ0tFVF9GSU9OQklPICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBJb2N0bFNvY2tldCBjYW1lbCBjYXNlIGZ1bmN0aW9uLiAqLworLyogI3VuZGVmIEhBVkVfSU9DVExTT0NLRVRfQ0FNRUwgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgYSB3b3JraW5nIElvY3RsU29ja2V0IGNhbWVsIGNhc2UgRklPTkJJTyBmdW5jdGlvbi4gKi8KKy8qICN1bmRlZiBIQVZFX0lPQ1RMU09DS0VUX0NBTUVMX0ZJT05CSU8gKi8KIAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxpby5oPiBoZWFkZXIgZmlsZS4gKi8KIC8qICN1bmRlZiBIQVZFX0lPX0ggKi8KQEAgLTM1MCwyOCArMjU5LDI4IEBACiAvKiAjdW5kZWYgSEFWRV9LUkJfSCAqLwogCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgbGJlci5oIGhlYWRlciBmaWxlLiAqLwotLyogI3VuZGVmIEhBVkVfTEJFUl9IICovCisvKiNkZWZpbmUgSEFWRV9MQkVSX0ggMSovCiAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBsZGFwc3NsLmggaGVhZGVyIGZpbGUuICovCiAvKiAjdW5kZWYgSEFWRV9MREFQU1NMX0ggKi8KIAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGxkYXAuaCBoZWFkZXIgZmlsZS4gKi8KLS8qICN1bmRlZiBIQVZFX0xEQVBfSCAqLworLyojZGVmaW5lIEhBVkVfTERBUF9IIDEqLwogCiAvKiBVc2UgTERBUFMgaW1wbGVtZW50YXRpb24gKi8KLS8qICN1bmRlZiBIQVZFX0xEQVBfU1NMICovCisvKiNkZWZpbmUgSEFWRV9MREFQX1NTTCAxKi8KIAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGxkYXBfc3NsLmggaGVhZGVyIGZpbGUuICovCiAvKiAjdW5kZWYgSEFWRV9MREFQX1NTTF9IICovCiAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgbGRhcF91cmxfcGFyc2UnIGZ1bmN0aW9uLiAqLwotLyogI3VuZGVmIEhBVkVfTERBUF9VUkxfUEFSU0UgKi8KKy8qI2RlZmluZSBIQVZFX0xEQVBfVVJMX1BBUlNFIDEqLwogCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGxpYmdlbi5oPiBoZWFkZXIgZmlsZS4gKi8KLSNkZWZpbmUgSEFWRV9MSUJHRU5fSCAxCisvKiNkZWZpbmUgSEFWRV9MSUJHRU5fSCAxKi8KIAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBpZG4nIGxpYnJhcnkgKC1saWRuKS4gKi8KLS8qICN1bmRlZiBIQVZFX0xJQklETiAqLworLyojZGVmaW5lIEhBVkVfTElCSUROIDEqLwogCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHJlc29sdicgbGlicmFyeSAoLWxyZXNvbHYpLiAqLwogLyogI3VuZGVmIEhBVkVfTElCUkVTT0xWICovCkBAIC0zNzksMjAgKzI4OCwxNyBAQAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGByZXNvbHZlJyBsaWJyYXJ5ICgtbHJlc29sdmUpLiAqLwogLyogI3VuZGVmIEhBVkVfTElCUkVTT0xWRSAqLwogCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHNvY2tldCcgbGlicmFyeSAoLWxzb2NrZXQpLiAqLworLyogI3VuZGVmIEhBVkVfTElCU09DS0VUICovCisKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc3NoMicgbGlicmFyeSAoLWxzc2gyKS4gKi8KLS8qICN1bmRlZiBIQVZFX0xJQlNTSDIgKi8KKy8qI2RlZmluZSBIQVZFX0xJQlNTSDIgMSovCiAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8bGlic3NoMi5oPiBoZWFkZXIgZmlsZS4gKi8KLS8qICN1bmRlZiBIQVZFX0xJQlNTSDJfSCAqLwotCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGxpYnNzaDJfdmVyc2lvbicgZnVuY3Rpb24uICovCi0vKiAjdW5kZWYgSEFWRV9MSUJTU0gyX1ZFUlNJT04gKi8KKy8qI2RlZmluZSBIQVZFX0xJQlNTSDJfSCAxKi8KIAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzc2wnIGxpYnJhcnkgKC1sc3NsKS4gKi8KLSNkZWZpbmUgSEFWRV9MSUJTU0wgMQotCi0vKiBpZiB6bGliIGlzIGF2YWlsYWJsZSAqLwotI2RlZmluZSBIQVZFX0xJQlogMQorLyojZGVmaW5lIEhBVkVfTElCU1NMIDEqLwogCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGxpbWl0cy5oPiBoZWFkZXIgZmlsZS4gKi8KICNkZWZpbmUgSEFWRV9MSU1JVFNfSCAxCkBAIC00MDMsMjUgKzMwOSwyMCBAQAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxsb2NhbGUuaD4gaGVhZGVyIGZpbGUuICovCiAjZGVmaW5lIEhBVkVfTE9DQUxFX0ggMQogCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSBhIHdvcmtpbmcgbG9jYWx0aW1lX3IgZnVuY3Rpb24uICovCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGxvY2FsdGltZV9yJyBmdW5jdGlvbi4gKi8KICNkZWZpbmUgSEFWRV9MT0NBTFRJTUVfUiAxCiAKIC8qIERlZmluZSB0byAxIGlmIHRoZSBjb21waWxlciBzdXBwb3J0cyB0aGUgJ2xvbmcgbG9uZycgZGF0YSB0eXBlLiAqLwogI2RlZmluZSBIQVZFX0xPTkdMT05HIDEKIAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIG1hbGxvYy5oIGhlYWRlciBmaWxlLiAqLwotLy8gRGVmaW5lZCBieSBBbmRyb2lkQ29uZmlnLmggdGhhdCBpcyBhdXRvbXRpY2FseSBpbmNsdWRlZCBpbiBidWlsZHMKLSN1bmRlZiBIQVZFX01BTExPQ19ICi0jZGVmaW5lIEhBVkVfTUFMTE9DX0ggMQorLyojZGVmaW5lIEhBVkVfTUFMTE9DX0ggMSovCiAKLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBtZW1vcnkuaCBoZWFkZXIgZmlsZS4gKi8KKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8bWVtb3J5Lmg+IGhlYWRlciBmaWxlLiAqLwogI2RlZmluZSBIQVZFX01FTU9SWV9IIDEKIAotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIG1lbXJjaHIgZnVuY3Rpb24gb3IgbWFjcm8uICovCi0vKiAjdW5kZWYgSEFWRV9NRU1SQ0hSICovCi0KIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBNU0dfTk9TSUdOQUwgZmxhZy4gKi8KLSNkZWZpbmUgSEFWRV9NU0dfTk9TSUdOQUwgMQorLyojZGVmaW5lIEhBVkVfTVNHX05PU0lHTkFMIDEqLwogCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPG5ldGRiLmg+IGhlYWRlciBmaWxlLiAqLwogI2RlZmluZSBIQVZFX05FVERCX0ggMQpAQCAtNDMwLDQxICszMzEsNDQgQEAKICNkZWZpbmUgSEFWRV9ORVRJTkVUX0lOX0ggMQogCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPG5ldGluZXQvdGNwLmg+IGhlYWRlciBmaWxlLiAqLwotI2RlZmluZSBIQVZFX05FVElORVRfVENQX0ggMQorLyojZGVmaW5lIEhBVkVfTkVUSU5FVF9UQ1BfSCAxKi8KIAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxuZXQvaWYuaD4gaGVhZGVyIGZpbGUuICovCiAjZGVmaW5lIEhBVkVfTkVUX0lGX0ggMQogCiAvKiBEZWZpbmUgdG8gMSBpZiBOSV9XSVRIU0NPUEVJRCBleGlzdHMgYW5kIHdvcmtzLiAqLwotLyogI3VuZGVmIEhBVkVfTklfV0lUSFNDT1BFSUQgKi8KKy8qI2RlZmluZSBIQVZFX05JX1dJVEhTQ09QRUlEIDEqLworCisvKiB3ZSBoYXZlIG5vIHN0cmVycm9yX3IoKSBwcm90byAqLworLyogI3VuZGVmIEhBVkVfTk9fU1RSRVJST1JfUl9ERUNMICovCiAKIC8qIGlmIHlvdSBoYXZlIGFuIG9sZCBNSVQgZ3NzYXBpIGxpYnJhcnksIGxhY2tpbmcgR1NTX0NfTlRfSE9TVEJBU0VEX1NFUlZJQ0UKICAgICovCiAvKiAjdW5kZWYgSEFWRV9PTERfR1NTTUlUICovCiAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8b3BlbnNzbC9jcnlwdG8uaD4gaGVhZGVyIGZpbGUuICovCi0jZGVmaW5lIEhBVkVfT1BFTlNTTF9DUllQVE9fSCAxCisvKiNkZWZpbmUgSEFWRV9PUEVOU1NMX0NSWVBUT19IIDEqLwogCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPG9wZW5zc2wvZW5naW5lLmg+IGhlYWRlciBmaWxlLiAqLwotLy8jZGVmaW5lIEhBVkVfT1BFTlNTTF9FTkdJTkVfSCAxCisvKiNkZWZpbmUgSEFWRV9PUEVOU1NMX0VOR0lORV9IIDEqLwogCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPG9wZW5zc2wvZXJyLmg+IGhlYWRlciBmaWxlLiAqLwotI2RlZmluZSBIQVZFX09QRU5TU0xfRVJSX0ggMQorLyojZGVmaW5lIEhBVkVfT1BFTlNTTF9FUlJfSCAxKi8KIAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxvcGVuc3NsL3BlbS5oPiBoZWFkZXIgZmlsZS4gKi8KLSNkZWZpbmUgSEFWRV9PUEVOU1NMX1BFTV9IIDEKKy8qI2RlZmluZSBIQVZFX09QRU5TU0xfUEVNX0ggMSovCiAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8b3BlbnNzbC9wa2NzMTIuaD4gaGVhZGVyIGZpbGUuICovCi0jZGVmaW5lIEhBVkVfT1BFTlNTTF9QS0NTMTJfSCAxCisvKiNkZWZpbmUgSEFWRV9PUEVOU1NMX1BLQ1MxMl9IIDEqLwogCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPG9wZW5zc2wvcnNhLmg+IGhlYWRlciBmaWxlLiAqLwotI2RlZmluZSBIQVZFX09QRU5TU0xfUlNBX0ggMQorLyojZGVmaW5lIEhBVkVfT1BFTlNTTF9SU0FfSCAxKi8KIAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxvcGVuc3NsL3NzbC5oPiBoZWFkZXIgZmlsZS4gKi8KLSNkZWZpbmUgSEFWRV9PUEVOU1NMX1NTTF9IIDEKKy8qI2RlZmluZSBIQVZFX09QRU5TU0xfU1NMX0ggMSovCiAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8b3BlbnNzbC94NTA5Lmg+IGhlYWRlciBmaWxlLiAqLwotI2RlZmluZSBIQVZFX09QRU5TU0xfWDUwOV9IIDEKKy8qI2RlZmluZSBIQVZFX09QRU5TU0xfWDUwOV9IIDEqLwogCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHBlbS5oPiBoZWFkZXIgZmlsZS4gKi8KIC8qICN1bmRlZiBIQVZFX1BFTV9IICovCkBAIC00NzgsMTYgKzM4MiwxNiBAQAogLyogaWYgeW91IGhhdmUgdGhlIGZ1bmN0aW9uIFBLMTFfQ3JlYXRlR2VuZXJpY09iamVjdCAqLwogLyogI3VuZGVmIEhBVkVfUEsxMV9DUkVBVEVHRU5FUklDT0JKRUNUICovCiAKLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIGEgd29ya2luZyBwb2xsIGZ1bmN0aW9uLiAqLwotI2RlZmluZSBIQVZFX1BPTEwgMQorLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBwb2xsJyBmdW5jdGlvbi4gKi8KKy8qI2RlZmluZSBIQVZFX1BPTEwgMSovCiAKIC8qIElmIHlvdSBoYXZlIGEgZmluZSBwb2xsICovCi0jZGVmaW5lIEhBVkVfUE9MTF9GSU5FIDEKKy8qI2RlZmluZSBIQVZFX1BPTExfRklORSAxKi8KIAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxwb2xsLmg+IGhlYWRlciBmaWxlLiAqLwotI2RlZmluZSBIQVZFX1BPTExfSCAxCisvKiNkZWZpbmUgSEFWRV9QT0xMX0ggMSovCiAKLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIGEgd29ya2luZyBQT1NJWC1zdHlsZSBzdHJlcnJvcl9yIGZ1bmN0aW9uLiAqLworLyogd2UgaGF2ZSBhIFBPU0lYLXN0eWxlIHN0cmVycm9yX3IoKSAqLwogI2RlZmluZSBIQVZFX1BPU0lYX1NUUkVSUk9SX1IgMQogCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHB3ZC5oPiBoZWFkZXIgZmlsZS4gKi8KQEAgLTUwMCw3ICs0MDQsNyBAQAogLyogI3VuZGVmIEhBVkVfUkFORF9TQ1JFRU4gKi8KIAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBSQU5EX3N0YXR1cycgZnVuY3Rpb24uICovCi0jZGVmaW5lIEhBVkVfUkFORF9TVEFUVVMgMQorLyojZGVmaW5lIEhBVkVfUkFORF9TVEFUVVMgMSovCiAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSByZWN2IGZ1bmN0aW9uLiAqLwogI2RlZmluZSBIQVZFX1JFQ1YgMQpAQCAtNTI3LDUyICs0MzEsNDYgQEAKIC8qICN1bmRlZiBIQVZFX1NFVE1PREUgKi8KIAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzZXRybGltaXQnIGZ1bmN0aW9uLiAqLwotI2RlZmluZSBIQVZFX1NFVFJMSU1JVCAxCisvKiNkZWZpbmUgSEFWRV9TRVRSTElNSVQgMSovCiAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBzZXRzb2Nrb3B0IGZ1bmN0aW9uLiAqLwotI2RlZmluZSBIQVZFX1NFVFNPQ0tPUFQgMQorLyogI3VuZGVmIEhBVkVfU0VUU09DS09QVCAqLwogCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSBhIHdvcmtpbmcgc2V0c29ja29wdCBTT19OT05CTE9DSyBmdW5jdGlvbi4gKi8KIC8qICN1bmRlZiBIQVZFX1NFVFNPQ0tPUFRfU09fTk9OQkxPQ0sgKi8KIAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzZ3R0eS5oPiBoZWFkZXIgZmlsZS4gKi8KLSNkZWZpbmUgSEFWRV9TR1RUWV9IIDEKKy8qI2RlZmluZSBIQVZFX1NHVFRZX0ggMSovCiAKLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBzaWdhY3Rpb24gZnVuY3Rpb24uICovCi0jZGVmaW5lIEhBVkVfU0lHQUNUSU9OIDEKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc2lnYWN0aW9uJyBmdW5jdGlvbi4gKi8KKy8qI2RlZmluZSBIQVZFX1NJR0FDVElPTiAxKi8KIAotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIHNpZ2ludGVycnVwdCBmdW5jdGlvbi4gKi8KLSNkZWZpbmUgSEFWRV9TSUdJTlRFUlJVUFQgMQorLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzaWdpbnRlcnJ1cHQnIGZ1bmN0aW9uLiAqLworLyojZGVmaW5lIEhBVkVfU0lHSU5URVJSVVBUIDEqLwogCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgc2lnbmFsIGZ1bmN0aW9uLiAqLwotI2RlZmluZSBIQVZFX1NJR05BTCAxCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHNpZ25hbCcgZnVuY3Rpb24uICovCisvKiNkZWZpbmUgSEFWRV9TSUdOQUwgMSovCiAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c2lnbmFsLmg+IGhlYWRlciBmaWxlLiAqLwogI2RlZmluZSBIQVZFX1NJR05BTF9IIDEKIAotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIHNpZ3NldGptcCBmdW5jdGlvbiBvciBtYWNyby4gKi8KLSNkZWZpbmUgSEFWRV9TSUdTRVRKTVAgMQorLyogSWYgeW91IGhhdmUgc2lnc2V0am1wICovCisvKiNkZWZpbmUgSEFWRV9TSUdTRVRKTVAgMSovCiAKIC8qIERlZmluZSB0byAxIGlmIHNpZ19hdG9taWNfdCBpcyBhbiBhdmFpbGFibGUgdHlwZWRlZi4gKi8KLSNkZWZpbmUgSEFWRV9TSUdfQVRPTUlDX1QgMQorLyojZGVmaW5lIEhBVkVfU0lHX0FUT01JQ19UIDEqLwogCiAvKiBEZWZpbmUgdG8gMSBpZiBzaWdfYXRvbWljX3QgaXMgYWxyZWFkeSBkZWZpbmVkIGFzIHZvbGF0aWxlLiAqLwogLyogI3VuZGVmIEhBVkVfU0lHX0FUT01JQ19UX1ZPTEFUSUxFICovCiAKLS8qIERlZmluZSB0byAxIGlmIHN0cnVjdCBzb2NrYWRkcl9pbjYgaGFzIHRoZSBzaW42X3Njb3BlX2lkIG1lbWJlciAqLwotI2RlZmluZSBIQVZFX1NPQ0tBRERSX0lONl9TSU42X1NDT1BFX0lEIDEKLQotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIHNvY2tldCBmdW5jdGlvbi4gKi8KKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc29ja2V0JyBmdW5jdGlvbi4gKi8KICNkZWZpbmUgSEFWRV9TT0NLRVQgMQogCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHNvY2tldC5oPiBoZWFkZXIgZmlsZS4gKi8KLS8qICN1bmRlZiBIQVZFX1NPQ0tFVF9IICovCi0KIC8qIERlZmluZSB0aGlzIGlmIHlvdSBoYXZlIHRoZSBTUE5FR08gbGlicmFyeSBmYm9wZW5zc2wgKi8KIC8qICN1bmRlZiBIQVZFX1NQTkVHTyAqLwogCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYFNTTF9nZXRfc2h1dGRvd24nIGZ1bmN0aW9uLiAqLwotI2RlZmluZSBIQVZFX1NTTF9HRVRfU0hVVERPV04gMQorLyojZGVmaW5lIEhBVkVfU1NMX0dFVF9TSFVURE9XTiAxKi8KIAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzc2wuaD4gaGVhZGVyIGZpbGUuICovCiAvKiAjdW5kZWYgSEFWRV9TU0xfSCAqLwpAQCAtNTg5LDIyICs0ODcsMjIgQEAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3RkbGliLmg+IGhlYWRlciBmaWxlLiAqLwogI2RlZmluZSBIQVZFX1NURExJQl9IIDEKIAotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIHN0cmNhc2VjbXAgZnVuY3Rpb24uICovCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHN0cmNhc2VjbXAnIGZ1bmN0aW9uLiAqLwogI2RlZmluZSBIQVZFX1NUUkNBU0VDTVAgMQogCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgc3RyY2FzZXN0ciBmdW5jdGlvbi4gKi8KLS8qICN1bmRlZiBIQVZFX1NUUkNBU0VTVFIgKi8KKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc3RyY2FzZXN0cicgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfU1RSQ0FTRVNUUiAxCiAKLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBzdHJjbXBpIGZ1bmN0aW9uLiAqLworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzdHJjbXBpJyBmdW5jdGlvbi4gKi8KIC8qICN1bmRlZiBIQVZFX1NUUkNNUEkgKi8KIAotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIHN0cmR1cCBmdW5jdGlvbi4gKi8KKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc3RyZHVwJyBmdW5jdGlvbi4gKi8KICNkZWZpbmUgSEFWRV9TVFJEVVAgMQogCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgc3RyZXJyb3JfciBmdW5jdGlvbi4gKi8KKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc3RyZXJyb3JfcicgZnVuY3Rpb24uICovCiAjZGVmaW5lIEhBVkVfU1RSRVJST1JfUiAxCiAKLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBzdHJpY21wIGZ1bmN0aW9uLiAqLworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzdHJpY21wJyBmdW5jdGlvbi4gKi8KIC8qICN1bmRlZiBIQVZFX1NUUklDTVAgKi8KIAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzdHJpbmdzLmg+IGhlYWRlciBmaWxlLiAqLwpAQCAtNjEzLDMyICs1MTEsMTkgQEAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3RyaW5nLmg+IGhlYWRlciBmaWxlLiAqLwogI2RlZmluZSBIQVZFX1NUUklOR19IIDEKIAotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIHN0cmxjYXQgZnVuY3Rpb24uICovCi0vKiAjdW5kZWYgSEFWRV9TVFJMQ0FUICovCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHN0cmxjYXQnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX1NUUkxDQVQgMQogCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHN0cmxjcHknIGZ1bmN0aW9uLiAqLwotLyogI3VuZGVmIEhBVkVfU1RSTENQWSAqLworI2RlZmluZSBIQVZFX1NUUkxDUFkgMQogCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgc3RybmNhc2VjbXAgZnVuY3Rpb24uICovCi0jZGVmaW5lIEhBVkVfU1RSTkNBU0VDTVAgMQotCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgc3RybmNtcGkgZnVuY3Rpb24uICovCi0vKiAjdW5kZWYgSEFWRV9TVFJOQ01QSSAqLwotCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgc3RybmljbXAgZnVuY3Rpb24uICovCi0vKiAjdW5kZWYgSEFWRV9TVFJOSUNNUCAqLwotCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN0cm9wdHMuaD4gaGVhZGVyIGZpbGUuICovCi0vLyBub3QgaW4gYmlvbmljCi0vLyNkZWZpbmUgSEFWRV9TVFJPUFRTX0ggMQotCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgc3Ryc3RyIGZ1bmN0aW9uLiAqLworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzdHJzdHInIGZ1bmN0aW9uLiAqLwogI2RlZmluZSBIQVZFX1NUUlNUUiAxCiAKLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBzdHJ0b2tfciBmdW5jdGlvbi4gKi8KKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc3RydG9rX3InIGZ1bmN0aW9uLiAqLwogI2RlZmluZSBIQVZFX1NUUlRPS19SIDEKIAotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIHN0cnRvbGwgZnVuY3Rpb24uICovCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHN0cnRvbGwnIGZ1bmN0aW9uLiAqLwogI2RlZmluZSBIQVZFX1NUUlRPTEwgMQogCiAvKiBpZiBzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSBpcyBkZWZpbmVkICovCkBAIC02NDgsNyArNTMzLDcgQEAKICNkZWZpbmUgSEFWRV9TVFJVQ1RfVElNRVZBTCAxCiAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL2ZpbGlvLmg+IGhlYWRlciBmaWxlLiAqLwotLyogI3VuZGVmIEhBVkVfU1lTX0ZJTElPX0ggKi8KKyNkZWZpbmUgSEFWRV9TWVNfRklMSU9fSCAxCiAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL2lvY3RsLmg+IGhlYWRlciBmaWxlLiAqLwogI2RlZmluZSBIQVZFX1NZU19JT0NUTF9IIDEKQEAgLTY1Nyw3ICs1NDIsNyBAQAogI2RlZmluZSBIQVZFX1NZU19QQVJBTV9IIDEKIAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvcG9sbC5oPiBoZWFkZXIgZmlsZS4gKi8KLSNkZWZpbmUgSEFWRV9TWVNfUE9MTF9IIDEKKy8qI2RlZmluZSBIQVZFX1NZU19QT0xMX0ggMSovCiAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3Jlc291cmNlLmg+IGhlYWRlciBmaWxlLiAqLwogI2RlZmluZSBIQVZFX1NZU19SRVNPVVJDRV9IIDEKQEAgLTY2OSw3ICs1NTQsNyBAQAogI2RlZmluZSBIQVZFX1NZU19TT0NLRVRfSCAxCiAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3NvY2tpby5oPiBoZWFkZXIgZmlsZS4gKi8KLS8qICN1bmRlZiBIQVZFX1NZU19TT0NLSU9fSCAqLworI2RlZmluZSBIQVZFX1NZU19TT0NLSU9fSCAxCiAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3N0YXQuaD4gaGVhZGVyIGZpbGUuICovCiAjZGVmaW5lIEhBVkVfU1lTX1NUQVRfSCAxCkBAIC02ODAsMzMgKzU2NSwyMyBAQAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvdHlwZXMuaD4gaGVhZGVyIGZpbGUuICovCiAjZGVmaW5lIEhBVkVfU1lTX1RZUEVTX0ggMQogCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy91aW8uaD4gaGVhZGVyIGZpbGUuICovCi0vLyBEZWZpbmVkIGJ5IEFuZHJvaWRDb25maWcuaCB0aGF0IGlzIGF1dG9tdGljYWx5IGluY2x1ZGVkIGluIGJ1aWxkcwotI3VuZGVmIEhBVkVfU1lTX1VJT19ICi0jZGVmaW5lIEhBVkVfU1lTX1VJT19IIDEKLQotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvdW4uaD4gaGVhZGVyIGZpbGUuICovCi0jZGVmaW5lIEhBVkVfU1lTX1VOX0ggMQotCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy91dGltZS5oPiBoZWFkZXIgZmlsZS4gKi8KIC8qICN1bmRlZiBIQVZFX1NZU19VVElNRV9IICovCiAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8dGVybWlvcy5oPiBoZWFkZXIgZmlsZS4gKi8KLSNkZWZpbmUgSEFWRV9URVJNSU9TX0ggMQorLyojZGVmaW5lIEhBVkVfVEVSTUlPU19IIDEqLwogCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHRlcm1pby5oPiBoZWFkZXIgZmlsZS4gKi8KLS8vIERlZmluZWQgYnkgQW5kcm9pZENvbmZpZy5oIHRoYXQgaXMgYXV0b210aWNhbHkgaW5jbHVkZWQgaW4gYnVpbGRzCi0jdW5kZWYgSEFWRV9URVJNSU9fSAotI2RlZmluZSBIQVZFX1RFUk1JT19IIDEKKy8qI2RlZmluZSBIQVZFX1RFUk1JT19IIDEqLwogCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHRpbWUuaD4gaGVhZGVyIGZpbGUuICovCiAjZGVmaW5lIEhBVkVfVElNRV9IIDEKIAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDx0bGQuaD4gaGVhZGVyIGZpbGUuICovCi0vKiAjdW5kZWYgSEFWRV9UTERfSCAqLworLyojZGVmaW5lIEhBVkVfVExEX0ggMSovCiAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgdGxkX3N0cmVycm9yJyBmdW5jdGlvbi4gKi8KLS8qICN1bmRlZiBIQVZFX1RMRF9TVFJFUlJPUiAqLworLyojZGVmaW5lIEhBVkVfVExEX1NUUkVSUk9SIDEqLwogCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHVuYW1lJyBmdW5jdGlvbi4gKi8KICNkZWZpbmUgSEFWRV9VTkFNRSAxCkBAIC03MjQsNyArNTk5LDcgQEAKICNkZWZpbmUgSEFWRV9WQVJJQURJQ19NQUNST1NfQzk5IDEKIAogLyogRGVmaW5lIHRvIDEgaWYgY29tcGlsZXIgc3VwcG9ydHMgb2xkIGdjYyB2YXJpYWRpYyBtYWNybyBzdHlsZS4gKi8KLSNkZWZpbmUgSEFWRV9WQVJJQURJQ19NQUNST1NfR0NDIDEKKy8qI2RlZmluZSBIQVZFX1ZBUklBRElDX01BQ1JPU19HQ0MgMSovCiAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSB3aW5iZXIuaCBoZWFkZXIgZmlsZS4gKi8KIC8qICN1bmRlZiBIQVZFX1dJTkJFUl9IICovCkBAIC03NDIsMTAgKzYxNyw3IEBACiAvKiAjdW5kZWYgSEFWRV9XSU5TT0NLX0ggKi8KIAogLyogRGVmaW5lIHRoaXMgc3ltYm9sIGlmIHlvdXIgT1Mgc3VwcG9ydHMgY2hhbmdpbmcgdGhlIGNvbnRlbnRzIG9mIGFyZ3YgKi8KLSNkZWZpbmUgSEFWRV9XUklUQUJMRV9BUkdWIDEKLQotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIHdyaXRldiBmdW5jdGlvbi4gKi8KLSNkZWZpbmUgSEFWRV9XUklURVYgMQorLyojZGVmaW5lIEhBVkVfV1JJVEFCTEVfQVJHViAxKi8KIAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIHdzMnRjcGlwLmggaGVhZGVyIGZpbGUuICovCiAvKiAjdW5kZWYgSEFWRV9XUzJUQ1BJUF9IICovCkBAIC03NTMsMTMgKzYyNSw2IEBACiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHg1MDkuaD4gaGVhZGVyIGZpbGUuICovCiAvKiAjdW5kZWYgSEFWRV9YNTA5X0ggKi8KIAotLyogaWYgeW91IGhhdmUgdGhlIHpsaWIuaCBoZWFkZXIgZmlsZSAqLwotI2RlZmluZSBIQVZFX1pMSUJfSCAxCi0KLS8qIERlZmluZSB0byB0aGUgc3ViLWRpcmVjdG9yeSBpbiB3aGljaCBsaWJ0b29sIHN0b3JlcyB1bmluc3RhbGxlZCBsaWJyYXJpZXMuCi0gICAqLwotI2RlZmluZSBMVF9PQkpESVIgIi5saWJzLyIKLQogLyogRGVmaW5lIHRvIDEgaWYgeW91IGFyZSBidWlsZGluZyBhIG5hdGl2ZSBXaW5kb3dzIHRhcmdldC4gKi8KIC8qICN1bmRlZiBOQVRJVkVfV0lORE9XUyAqLwogCkBAIC03NjksOSArNjM0LDYgQEAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBuZWVkIHRoZSBtYWxsb2MuaCBoZWFkZXIgZmlsZSBldmVuIHdpdGggc3RkbGliLmggKi8KIC8qICN1bmRlZiBORUVEX01BTExPQ19IICovCiAKLS8qIERlZmluZSB0byAxIGlmIHlvdSBuZWVkIHRoZSBtZW1vcnkuaCBoZWFkZXIgZmlsZSBldmVuIHdpdGggc3RkbGliLmggKi8KLS8qICN1bmRlZiBORUVEX01FTU9SWV9IICovCi0KIC8qIERlZmluZSB0byAxIGlmIF9SRUVOVFJBTlQgcHJlcHJvY2Vzc29yIHN5bWJvbCBtdXN0IGJlIGRlZmluZWQuICovCiAvKiAjdW5kZWYgTkVFRF9SRUVOVFJBTlQgKi8KIApAQCAtNzc5LDExOSArNjQxLDc0IEBACiAvKiAjdW5kZWYgTkVFRF9USFJFQURfU0FGRSAqLwogCiAvKiBjcHUtbWFjaGluZS1PUyAqLwotI2RlZmluZSBPUyAiYXJtLXVua25vd24tZWFiaSIKKyNpZmRlZiBfX1dJTlNfXworI2RlZmluZSBPUyAiaTM4Ni1wYy1lcG9jMzIiCisjZWxpZiBfX01BUk1fXworI2RlZmluZSBPUyAiYXJtLXVua25vd24tZXBvYzMyIgorI2Vsc2UKKy8qIFRoaXMgd29uJ3QgaGFwcGVuIG9uIGFueSBjdXJyZW50IFN5bWJpYW4gdmVyc2lvbiAqLworI2RlZmluZSBPUyAidW5rbm93bi11bmtub3duLWVwb2MzMiIKKyNlbmRpZgogCiAvKiBOYW1lIG9mIHBhY2thZ2UgKi8KLSNkZWZpbmUgUEFDS0FHRSAiY3VybCIKKy8qI2RlZmluZSBQQUNLQUdFICJjdXJsIiovCiAKIC8qIERlZmluZSB0byB0aGUgYWRkcmVzcyB3aGVyZSBidWcgcmVwb3J0cyBmb3IgdGhpcyBwYWNrYWdlIHNob3VsZCBiZSBzZW50LiAqLwotI2RlZmluZSBQQUNLQUdFX0JVR1JFUE9SVCAiYSBzdWl0YWJsZSBjdXJsIG1haWxpbmcgbGlzdCA9PiBodHRwOi8vY3VybC5oYXh4LnNlL21haWwvIgorLyojZGVmaW5lIFBBQ0tBR0VfQlVHUkVQT1JUICJhIHN1aXRhYmxlIGN1cmwgbWFpbGluZyBsaXN0ID0+IGh0dHA6Ly9jdXJsLmhheHguc2UvbWFpbC8iKi8KIAogLyogRGVmaW5lIHRvIHRoZSBmdWxsIG5hbWUgb2YgdGhpcyBwYWNrYWdlLiAqLwotI2RlZmluZSBQQUNLQUdFX05BTUUgImN1cmwiCisvKiNkZWZpbmUgUEFDS0FHRV9OQU1FICJjdXJsIiovCiAKIC8qIERlZmluZSB0byB0aGUgZnVsbCBuYW1lIGFuZCB2ZXJzaW9uIG9mIHRoaXMgcGFja2FnZS4gKi8KLSNkZWZpbmUgUEFDS0FHRV9TVFJJTkcgImN1cmwgLSIKKy8qI2RlZmluZSBQQUNLQUdFX1NUUklORyAiY3VybCAtIiovCiAKIC8qIERlZmluZSB0byB0aGUgb25lIHN5bWJvbCBzaG9ydCBuYW1lIG9mIHRoaXMgcGFja2FnZS4gKi8KLSNkZWZpbmUgUEFDS0FHRV9UQVJOQU1FICJjdXJsIgotCi0vKiBEZWZpbmUgdG8gdGhlIGhvbWUgcGFnZSBmb3IgdGhpcyBwYWNrYWdlLiAqLwotI2RlZmluZSBQQUNLQUdFX1VSTCAiIgorLyojZGVmaW5lIFBBQ0tBR0VfVEFSTkFNRSAiY3VybCIqLwogCiAvKiBEZWZpbmUgdG8gdGhlIHZlcnNpb24gb2YgdGhpcyBwYWNrYWdlLiAqLwotI2RlZmluZSBQQUNLQUdFX1ZFUlNJT04gIi0iCisvKiNkZWZpbmUgUEFDS0FHRV9WRVJTSU9OICItIiovCiAKIC8qIGEgc3VpdGFibGUgZmlsZSB0byByZWFkIHJhbmRvbSBkYXRhIGZyb20gKi8KLSNkZWZpbmUgUkFORE9NX0ZJTEUgIi9kZXYvdXJhbmRvbSIKKy8qI2RlZmluZSBSQU5ET01fRklMRSAiL2Rldi91cmFuZG9tIiovCiAKLS8qIERlZmluZSB0byB0aGUgdHlwZSBvZiBhcmcgMSBmb3IgcmVjdmZyb20uICovCi0jZGVmaW5lIFJFQ1ZGUk9NX1RZUEVfQVJHMSBpbnQKLQotLyogRGVmaW5lIHRvIHRoZSB0eXBlIHBvaW50ZWQgYnkgYXJnIDIgZm9yIHJlY3Zmcm9tLiAqLwotI2RlZmluZSBSRUNWRlJPTV9UWVBFX0FSRzIgdm9pZAotCi0vKiBEZWZpbmUgdG8gMSBpZiB0aGUgdHlwZSBwb2ludGVkIGJ5IGFyZyAyIGZvciByZWN2ZnJvbSBpcyB2b2lkLiAqLwotI2RlZmluZSBSRUNWRlJPTV9UWVBFX0FSRzJfSVNfVk9JRCAxCi0KLS8qIERlZmluZSB0byB0aGUgdHlwZSBvZiBhcmcgMyBmb3IgcmVjdmZyb20uICovCi0jZGVmaW5lIFJFQ1ZGUk9NX1RZUEVfQVJHMyBzaXplX3QKLQotLyogRGVmaW5lIHRvIHRoZSB0eXBlIG9mIGFyZyA0IGZvciByZWN2ZnJvbS4gKi8KLSNkZWZpbmUgUkVDVkZST01fVFlQRV9BUkc0IGludAotCi0vKiBEZWZpbmUgdG8gdGhlIHR5cGUgcG9pbnRlZCBieSBhcmcgNSBmb3IgcmVjdmZyb20uICovCi0jZGVmaW5lIFJFQ1ZGUk9NX1RZUEVfQVJHNSBzdHJ1Y3Qgc29ja2FkZHIKLQotLyogRGVmaW5lIHRvIDEgaWYgdGhlIHR5cGUgcG9pbnRlZCBieSBhcmcgNSBmb3IgcmVjdmZyb20gaXMgdm9pZC4gKi8KLS8qICN1bmRlZiBSRUNWRlJPTV9UWVBFX0FSRzVfSVNfVk9JRCAqLwotCi0vKiBEZWZpbmUgdG8gdGhlIHR5cGUgcG9pbnRlZCBieSBhcmcgNiBmb3IgcmVjdmZyb20uICovCi0jZGVmaW5lIFJFQ1ZGUk9NX1RZUEVfQVJHNiBzb2NrbGVuX3QKLQotLyogRGVmaW5lIHRvIDEgaWYgdGhlIHR5cGUgcG9pbnRlZCBieSBhcmcgNiBmb3IgcmVjdmZyb20gaXMgdm9pZC4gKi8KLS8qICN1bmRlZiBSRUNWRlJPTV9UWVBFX0FSRzZfSVNfVk9JRCAqLwotCi0vKiBEZWZpbmUgdG8gdGhlIGZ1bmN0aW9uIHJldHVybiB0eXBlIGZvciByZWN2ZnJvbS4gKi8KLSNkZWZpbmUgUkVDVkZST01fVFlQRV9SRVRWIHNzaXplX3QKLQotLyogRGVmaW5lIHRvIHRoZSB0eXBlIG9mIGFyZyAxIGZvciByZWN2LiAqLwogI2RlZmluZSBSRUNWX1RZUEVfQVJHMSBpbnQKLQotLyogRGVmaW5lIHRvIHRoZSB0eXBlIG9mIGFyZyAyIGZvciByZWN2LiAqLwotI2RlZmluZSBSRUNWX1RZUEVfQVJHMiB2b2lkICoKLQotLyogRGVmaW5lIHRvIHRoZSB0eXBlIG9mIGFyZyAzIGZvciByZWN2LiAqLworI2RlZmluZSBSRUNWX1RZUEVfQVJHMiB2b2lkKgogI2RlZmluZSBSRUNWX1RZUEVfQVJHMyBzaXplX3QKLQotLyogRGVmaW5lIHRvIHRoZSB0eXBlIG9mIGFyZyA0IGZvciByZWN2LiAqLwogI2RlZmluZSBSRUNWX1RZUEVfQVJHNCBpbnQKLQotLyogRGVmaW5lIHRvIHRoZSBmdW5jdGlvbiByZXR1cm4gdHlwZSBmb3IgcmVjdi4gKi8KICNkZWZpbmUgUkVDVl9UWVBFX1JFVFYgc3NpemVfdAogCisjZGVmaW5lIFJFQ1ZGUk9NX1RZUEVfQVJHMSBpbnQKKyNkZWZpbmUgUkVDVkZST01fVFlQRV9BUkcyIHZvaWQKKyNkZWZpbmUgUkVDVkZST01fVFlQRV9BUkczIHNpemVfdAorI2RlZmluZSBSRUNWRlJPTV9UWVBFX0FSRzQgaW50CisjZGVmaW5lIFJFQ1ZGUk9NX1RZUEVfQVJHNSBzdHJ1Y3Qgc29ja2FkZHIKKyNkZWZpbmUgUkVDVkZST01fVFlQRV9BUkc2IHNpemVfdAorI2RlZmluZSBSRUNWRlJPTV9UWVBFX1JFVFYgc3NpemVfdAorI2RlZmluZSBSRUNWRlJPTV9UWVBFX0FSRzJfSVNfVk9JRCAxCisKKyNkZWZpbmUgU0VORF9UWVBFX0FSRzEgaW50CisjZGVmaW5lIFNFTkRfUVVBTF9BUkcyIGNvbnN0CisjZGVmaW5lIFNFTkRfVFlQRV9BUkcyIHZvaWQqCisjZGVmaW5lIFNFTkRfVFlQRV9BUkczIHNpemVfdAorI2RlZmluZSBTRU5EX1RZUEVfQVJHNCBpbnQKKyNkZWZpbmUgU0VORF9UWVBFX1JFVFYgc3NpemVfdAorCisKIC8qIERlZmluZSBhcyB0aGUgcmV0dXJuIHR5cGUgb2Ygc2lnbmFsIGhhbmRsZXJzIChgaW50JyBvciBgdm9pZCcpLiAqLwotI2RlZmluZSBSRVRTSUdUWVBFIHZvaWQKKy8qI2RlZmluZSBSRVRTSUdUWVBFIHZvaWQqLwogCi0vKiBEZWZpbmUgdG8gdGhlIHR5cGUgcXVhbGlmaWVyIG9mIGFyZyA1IGZvciBzZWxlY3QuICovCi0jZGVmaW5lIFNFTEVDVF9RVUFMX0FSRzUgCi0KLS8qIERlZmluZSB0byB0aGUgdHlwZSBvZiBhcmcgMSBmb3Igc2VsZWN0LiAqLworLyogRGVmaW5lIHRvIHRoZSB0eXBlIG9mIGFyZyAxIGZvciBgc2VsZWN0Jy4gKi8KICNkZWZpbmUgU0VMRUNUX1RZUEVfQVJHMSBpbnQKIAotLyogRGVmaW5lIHRvIHRoZSB0eXBlIG9mIGFyZ3MgMiwgMyBhbmQgNCBmb3Igc2VsZWN0LiAqLwotI2RlZmluZSBTRUxFQ1RfVFlQRV9BUkcyMzQgZmRfc2V0ICoKKy8qIERlZmluZSB0byB0aGUgdHlwZSBvZiBhcmdzIDIsIDMgYW5kIDQgZm9yIGBzZWxlY3QnLiAqLworI2RlZmluZSBTRUxFQ1RfVFlQRV9BUkcyMzQgKGZkX3NldCAqKQogCi0vKiBEZWZpbmUgdG8gdGhlIHR5cGUgb2YgYXJnIDUgZm9yIHNlbGVjdC4gKi8KLSNkZWZpbmUgU0VMRUNUX1RZUEVfQVJHNSBzdHJ1Y3QgdGltZXZhbCAqCi0KLS8qIERlZmluZSB0byB0aGUgZnVuY3Rpb24gcmV0dXJuIHR5cGUgZm9yIHNlbGVjdC4gKi8KLSNkZWZpbmUgU0VMRUNUX1RZUEVfUkVUViBpbnQKLQotLyogRGVmaW5lIHRvIHRoZSB0eXBlIHF1YWxpZmllciBvZiBhcmcgMiBmb3Igc2VuZC4gKi8KLSNkZWZpbmUgU0VORF9RVUFMX0FSRzIgY29uc3QKLQotLyogRGVmaW5lIHRvIHRoZSB0eXBlIG9mIGFyZyAxIGZvciBzZW5kLiAqLwotI2RlZmluZSBTRU5EX1RZUEVfQVJHMSBpbnQKLQotLyogRGVmaW5lIHRvIHRoZSB0eXBlIG9mIGFyZyAyIGZvciBzZW5kLiAqLwotI2RlZmluZSBTRU5EX1RZUEVfQVJHMiB2b2lkICoKLQotLyogRGVmaW5lIHRvIHRoZSB0eXBlIG9mIGFyZyAzIGZvciBzZW5kLiAqLwotI2RlZmluZSBTRU5EX1RZUEVfQVJHMyBzaXplX3QKLQotLyogRGVmaW5lIHRvIHRoZSB0eXBlIG9mIGFyZyA0IGZvciBzZW5kLiAqLwotI2RlZmluZSBTRU5EX1RZUEVfQVJHNCBpbnQKLQotLyogRGVmaW5lIHRvIHRoZSBmdW5jdGlvbiByZXR1cm4gdHlwZSBmb3Igc2VuZC4gKi8KLSNkZWZpbmUgU0VORF9UWVBFX1JFVFYgc3NpemVfdAorLyogRGVmaW5lIHRvIHRoZSB0eXBlIG9mIGFyZyA1IGZvciBgc2VsZWN0Jy4gKi8KKyNkZWZpbmUgU0VMRUNUX1RZUEVfQVJHNSAoc3RydWN0IHRpbWV2YWwgKikKIAogLyogVGhlIHNpemUgb2YgYGludCcsIGFzIGNvbXB1dGVkIGJ5IHNpemVvZi4gKi8KICNkZWZpbmUgU0laRU9GX0lOVCA0CiAKLS8qIFRoZSBzaXplIG9mIGBsb25nJywgYXMgY29tcHV0ZWQgYnkgc2l6ZW9mLiAqLwotI2RlZmluZSBTSVpFT0ZfTE9ORyA4Ci0KIC8qIFRoZSBzaXplIG9mIGBvZmZfdCcsIGFzIGNvbXB1dGVkIGJ5IHNpemVvZi4gKi8KICNkZWZpbmUgU0laRU9GX09GRl9UIDgKIApAQCAtODk5LDUxICs3MTYsMzUgQEAKICNkZWZpbmUgU0laRU9GX1NIT1JUIDIKIAogLyogVGhlIHNpemUgb2YgYHNpemVfdCcsIGFzIGNvbXB1dGVkIGJ5IHNpemVvZi4gKi8KLSNkZWZpbmUgU0laRU9GX1NJWkVfVCA4CisjZGVmaW5lIFNJWkVPRl9TSVpFX1QgNAogCiAvKiBUaGUgc2l6ZSBvZiBgdGltZV90JywgYXMgY29tcHV0ZWQgYnkgc2l6ZW9mLiAqLwotI2RlZmluZSBTSVpFT0ZfVElNRV9UIDgKLQotLyogVGhlIHNpemUgb2YgYHZvaWQqJywgYXMgY29tcHV0ZWQgYnkgc2l6ZW9mLiAqLwotI2RlZmluZSBTSVpFT0ZfVk9JRFAgOAorI2RlZmluZSBTSVpFT0ZfVElNRV9UIDQKIAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIEFOU0kgQyBoZWFkZXIgZmlsZXMuICovCiAjZGVmaW5lIFNURENfSEVBREVSUyAxCiAKLS8qIERlZmluZSB0byB0aGUgdHlwZSBvZiBhcmcgMyBmb3Igc3RyZXJyb3Jfci4gKi8KLSNkZWZpbmUgU1RSRVJST1JfUl9UWVBFX0FSRzMgc2l6ZV90Ci0KIC8qIERlZmluZSB0byAxIGlmIHlvdSBjYW4gc2FmZWx5IGluY2x1ZGUgYm90aCA8c3lzL3RpbWUuaD4gYW5kIDx0aW1lLmg+LiAqLwogI2RlZmluZSBUSU1FX1dJVEhfU1lTX1RJTUUgMQogCi0vKiBEZWZpbmUgdG8gZW5hYmxlIGMtYXJlcyBzdXBwb3J0ICovCisvKiBEZWZpbmUgaWYgeW91IHdhbnQgdG8gZW5hYmxlIGMtYXJlcyBzdXBwb3J0ICovCiAvKiAjdW5kZWYgVVNFX0FSRVMgKi8KIAotLyogRGVmaW5lIHRvIGRpc2FibGUgbm9uLWJsb2NraW5nIHNvY2tldHMuICovCisvKiBEZWZpbmUgdG8gZGlzYWJsZSBub24tYmxvY2tpbmcgc29ja2V0cyAqLwogLyogI3VuZGVmIFVTRV9CTE9DS0lOR19TT0NLRVRTICovCiAKIC8qIGlmIEdudVRMUyBpcyBlbmFibGVkICovCiAvKiAjdW5kZWYgVVNFX0dOVVRMUyAqLwogCiAvKiBpZiBsaWJTU0gyIGlzIGluIHVzZSAqLwotLyogI3VuZGVmIFVTRV9MSUJTU0gyICovCisvKiNkZWZpbmUgVVNFX0xJQlNTSDIgMSovCiAKIC8qIElmIHlvdSB3YW50IHRvIGJ1aWxkIGN1cmwgd2l0aCB0aGUgYnVpbHQtaW4gbWFudWFsICovCi0jZGVmaW5lIFVTRV9NQU5VQUwgMQorLyojZGVmaW5lIFVTRV9NQU5VQUwgMSovCiAKIC8qIGlmIE5TUyBpcyBlbmFibGVkICovCiAvKiAjdW5kZWYgVVNFX05TUyAqLwogCi0vKiBpZiBPcGVuU1NMIGlzIGluIHVzZSAqLwotI2RlZmluZSBVU0VfT1BFTlNTTCAxCi0KLS8qIGlmIFNTTCBpcyBlbmFibGVkICovCi0jZGVmaW5lIFVTRV9TU0xFQVkgMQotCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgYXJlIGJ1aWxkaW5nIGEgV2luZG93cyB0YXJnZXQgd2l0aG91dCBsYXJnZSBmaWxlCi0gICBzdXBwb3J0LiAqLwotLyogI3VuZGVmIFVTRV9XSU4zMl9MQVJHRV9GSUxFUyAqLwotCiAvKiB0byBlbmFibGUgU1NQSSBzdXBwb3J0ICovCiAvKiAjdW5kZWYgVVNFX1dJTkRPV1NfU1NQSSAqLwogCkBAIC05NTEsMTggKzc1MiwyMCBAQAogLyogI3VuZGVmIFVTRV9ZQVNTTEVNVUwgKi8KIAogLyogVmVyc2lvbiBudW1iZXIgb2YgcGFja2FnZSAqLwotI2RlZmluZSBWRVJTSU9OICI3LjIwLjEiCisvKiNkZWZpbmUgVkVSU0lPTiAiNy4xOC4yLUNWUyIqLwogCiAvKiBEZWZpbmUgdG8gYXZvaWQgYXV0b21hdGljIGluY2x1c2lvbiBvZiB3aW5zb2NrLmggKi8KIC8qICN1bmRlZiBXSU4zMl9MRUFOX0FORF9NRUFOICovCiAKLS8qIERlZmluZSB0byAxIGlmIE9TIGlzIEFJWC4gKi8KKy8qIERlZmluZSB0byAxIGlmIG9uIEFJWCAzLgorICAgU3lzdGVtIGhlYWRlcnMgc29tZXRpbWVzIGRlZmluZSB0aGlzLgorICAgV2UganVzdCB3YW50IHRvIGF2b2lkIGEgcmVkZWZpbml0aW9uIGVycm9yIG1lc3NhZ2UuICAqLwogI2lmbmRlZiBfQUxMX1NPVVJDRQotLyogIyAgdW5kZWYgX0FMTF9TT1VSQ0UgKi8KKy8qICMgdW5kZWYgX0FMTF9TT1VSQ0UgKi8KICNlbmRpZgogCiAvKiBOdW1iZXIgb2YgYml0cyBpbiBhIGZpbGUgb2Zmc2V0LCBvbiBob3N0cyB3aGVyZSB0aGlzIGlzIHNldHRhYmxlLiAqLwotLyogI3VuZGVmIF9GSUxFX09GRlNFVF9CSVRTICovCisjZGVmaW5lIF9GSUxFX09GRlNFVF9CSVRTIDY0CiAKIC8qIERlZmluZSBmb3IgbGFyZ2UgZmlsZXMsIG9uIEFJWC1zdHlsZSBob3N0cy4gKi8KIC8qICN1bmRlZiBfTEFSR0VfRklMRVMgKi8KQEAgLTk3MCw3ICs3NzMsNyBAQAogLyogRGVmaW5lIHRvIGVtcHR5IGlmIGBjb25zdCcgZG9lcyBub3QgY29uZm9ybSB0byBBTlNJIEMuICovCiAvKiAjdW5kZWYgY29uc3QgKi8KIAotLyogVHlwZSB0byB1c2UgaW4gcGxhY2Ugb2YgaW5fYWRkcl90IHdoZW4gc3lzdGVtIGRvZXMgbm90IHByb3ZpZGUgaXQuICovCisvKiB0eXBlIHRvIHVzZSBpbiBwbGFjZSBvZiBpbl9hZGRyX3QgaWYgbm90IGRlZmluZWQgKi8KIC8qICN1bmRlZiBpbl9hZGRyX3QgKi8KIAogLyogRGVmaW5lIHRvIGBfX2lubGluZV9fJyBvciBgX19pbmxpbmUnIGlmIHRoYXQncyB3aGF0IHRoZSBDIGNvbXBpbGVyCkBAIC05ODQsMyArNzg3LDI1IEBACiAKIC8qIHRoZSBzaWduZWQgdmVyc2lvbiBvZiBzaXplX3QgKi8KIC8qICN1bmRlZiBzc2l6ZV90ICovCisKKy8qIEVuYWJsaW5nIGN1cmwgZGVidWcgbW9kZSB3aGVuIGJ1aWxkaW5nIGluIFN5bWJpYW4gZGVidWcgbW9kZSB3b3VsZCB3b3JrICovCisvKiBleGNlcHQgdGhhdCBkZWJ1ZyBtb2RlIGludHJvZHVjZXMgbmV3IGV4cG9ydHMgdGhhdCBtdXN0IGJlIGZyb3plbi4gKi8KKyNpZmRlZiBfREVCVUcKKy8qICNkZWZpbmUgQ1VSTERFQlVHICovCisjZW5kaWYKKworLyogc3lzL2NkZWZzLmggZmFpbHMgdG8gZGVmaW5lIHRoaXMgZm9yIFdJTlNDVyBwcmlvciB0byBTeW1iaWFuIE9TIHZlci4gOS40ICovCisjaWZuZGVmIF9fTE9OR19MT05HX1NVUFBPUlRFRAorI2RlZmluZSBfX0xPTkdfTE9OR19TVVBQT1JURUQKKyNlbmRpZgorCisvKiBFbmFibGUgYXBwcm9wcmlhdGUgaGVhZGVyIG9ubHkgd2hlbiB6bGliIHN1cHBvcnQgaXMgZW5hYmxlZCAqLworI2lmZGVmIEhBVkVfTElCWgorI2RlZmluZSBIQVZFX1pMSUJfSCAxCisjZW5kaWYKKworLyogRW5hYmxlIGFwcHJvcHJpYXRlIGRlZmluaXRpb25zIG9ubHkgd2hlbiBPcGVuU1NMIHN1cHBvcnQgaXMgZW5hYmxlZCAqLworI2lmZGVmIFVTRV9TU0xFQVkKKy8qIGlmIE9wZW5TU0wgaXMgaW4gdXNlICovCisjZGVmaW5lIFVTRV9PUEVOU1NMCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYi9jb25maWctdHBmLmggYi9saWIvY29uZmlnLXRwZi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlNDk0ZjcKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY29uZmlnLXRwZi5oCkBAIC0wLDAgKzEsNzYxIEBACisjaWZuZGVmIF9fTElCQ09ORklHVFBGX0gKKyNkZWZpbmUgX19MSUJDT05GSUdUUEZfSAorCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisvKiAgICBsaWIvY29uZmlnLXRwZi5oIC0gSGFuZCBjcmFmdGVkIGNvbmZpZyBmaWxlIGZvciBUUEYgICAgICAgICAgICovCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qICAgICAgICAgICAgRkVBVFVSRVMsIEZVTkNUSU9OUywgYW5kIERFRklOSVRJT05TICAgICAgICAgICAgICAgICAgKi8KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyogTk9URTogUmVmZXIgYWxzbyB0byB0aGUgLm1hayBmaWxlIGZvciBzb21lIG9mIHRoZSBmbGFncyBiZWxvdyAqLworCisvKiB3aGVuIGJ1aWxkaW5nIGxpYmN1cmwgaXRzZWxmICovCisvKiAjdW5kZWYgQlVJTERJTkdfTElCQ1VSTCAqLworCisvKiB0byBkaXNhYmxlIGNvb2tpZXMgc3VwcG9ydCAqLworLyogI3VuZGVmIENVUkxfRElTQUJMRV9DT09LSUVTICovCisKKy8qIHRvIGRpc2FibGUgY3J5cHRvZ3JhcGhpYyBhdXRoZW50aWNhdGlvbiAqLworLyogI3VuZGVmIENVUkxfRElTQUJMRV9DUllQVE9fQVVUSCAqLworCisvKiB0byBkaXNhYmxlIERJQ1QgKi8KKy8qICN1bmRlZiBDVVJMX0RJU0FCTEVfRElDVCAqLworCisvKiB0byBkaXNhYmxlIEZJTEUgKi8KKy8qICN1bmRlZiBDVVJMX0RJU0FCTEVfRklMRSAqLworCisvKiB0byBkaXNhYmxlIEZUUCAqLworLyogI3VuZGVmIENVUkxfRElTQUJMRV9GVFAgKi8KKworLyogdG8gZGlzYWJsZSBIVFRQICovCisvKiAjdW5kZWYgQ1VSTF9ESVNBQkxFX0hUVFAgKi8KKworLyogdG8gZGlzYWJsZSBMREFQICovCisvKiAjdW5kZWYgQ1VSTF9ESVNBQkxFX0xEQVAgKi8KKworLyogdG8gZGlzYWJsZSBURUxORVQgKi8KKy8qICN1bmRlZiBDVVJMX0RJU0FCTEVfVEVMTkVUICovCisKKy8qIHRvIGRpc2FibGUgVEZUUCAqLworLyogI3VuZGVmIENVUkxfRElTQUJMRV9URlRQICovCisKKy8qIHRvIGRpc2FibGUgdmVyYm9zZSBzdHJpbmdzICovCisvKiAjdW5kZWYgQ1VSTF9ESVNBQkxFX1ZFUkJPU0VfU1RSSU5HUyAqLworCisvKiB3aGVuIG5vdCBidWlsZGluZyBhIHNoYXJlZCBsaWJyYXJ5ICovCisvKiAjdW5kZWYgQ1VSTF9TVEFUSUNMSUIgKi8KKworLyogbGJlciBkeW5hbWljIGxpYnJhcnkgZmlsZSAqLworLyogI3VuZGVmIERMX0xCRVJfRklMRSAqLworCisvKiBsZGFwIGR5bmFtaWMgbGlicmFyeSBmaWxlICovCisvKiAjdW5kZWYgRExfTERBUF9GSUxFICovCisKKy8qIHlvdXIgRW50cm9weSBHYXRoZXJpbmcgRGFlbW9uIHNvY2tldCBwYXRobmFtZSAqLworLyogI3VuZGVmIEVHRF9TT0NLRVQgKi8KKworLyogRGVmaW5lIGlmIHlvdSB3YW50IHRvIGVuYWJsZSBJUHY2IHN1cHBvcnQgKi8KKy8qICN1bmRlZiBFTkFCTEVfSVBWNiAqLworCisvKiBEZWZpbmUgaWYgc3RydWN0IHNvY2thZGRyX2luNiBoYXMgdGhlIHNpbjZfc2NvcGVfaWQgbWVtYmVyICovCisvKiAjdW5kZWYgSEFWRV9TT0NLQUREUl9JTjZfU0lONl9TQ09QRV9JRCAqLworCisvKiBEZWZpbmUgdG8gdGhlIHR5cGUgb2YgYXJnIDEgZm9yIGdldG5hbWVpbmZvLiAqLworLyogI3VuZGVmIEdFVE5BTUVJTkZPX1RZUEVfQVJHMSAqLworCisvKiBEZWZpbmUgdG8gdGhlIHR5cGUgb2YgYXJnIDIgZm9yIGdldG5hbWVpbmZvLiAqLworLyogI3VuZGVmIEdFVE5BTUVJTkZPX1RZUEVfQVJHMiAqLworCisvKiBEZWZpbmUgdG8gdGhlIHR5cGUgb2YgYXJncyA0IGFuZCA2IGZvciBnZXRuYW1laW5mby4gKi8KKy8qICN1bmRlZiBHRVROQU1FSU5GT19UWVBFX0FSRzQ2ICovCisKKy8qIERlZmluZSB0byB0aGUgdHlwZSBvZiBhcmcgNyBmb3IgZ2V0bmFtZWluZm8uICovCisvKiAjdW5kZWYgR0VUTkFNRUlORk9fVFlQRV9BUkc3ICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBhbGFybSBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9BTEFSTSAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8YXJwYS9pbmV0Lmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX0FSUEFfSU5FVF9IIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxhcnBhL3RmdHAuaD4gaGVhZGVyIGZpbGUuICovCisvKiAjdW5kZWYgSEFWRV9BUlBBX1RGVFBfSCAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGFzc2VydC5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9BU1NFUlRfSCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgYmFzZW5hbWUnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX0JBU0VOQU1FIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBjbG9zZXNvY2tldCcgZnVuY3Rpb24uICovCisvKiAjdW5kZWYgSEFWRV9DTE9TRVNPQ0tFVCAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYENSWVBUT19jbGVhbnVwX2FsbF9leF9kYXRhJyBmdW5jdGlvbi4gKi8KKy8qICN1bmRlZiBIQVZFX0NSWVBUT19DTEVBTlVQX0FMTF9FWF9EQVRBICovCisjZGVmaW5lIEhBVkVfQ1JZUFRPX0NMRUFOVVBfQUxMX0VYX0RBVEEgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGNyeXB0by5oPiBoZWFkZXIgZmlsZS4gKi8KKy8qICN1bmRlZiBIQVZFX0NSWVBUT19IICovCisjZGVmaW5lIEhBVkVfQ1JZUFRPX0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGRlcy5oPiBoZWFkZXIgZmlsZS4gKi8KKy8qICN1bmRlZiBIQVZFX0RFU19IICovCisjZGVmaW5lIEhBVkVfREVTX0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYEVOR0lORV9sb2FkX2J1aWx0aW5fZW5naW5lcycgZnVuY3Rpb24uICovCisvKiAjdW5kZWYgSEFWRV9FTkdJTkVfTE9BRF9CVUlMVElOX0VOR0lORVMgKi8KKyNkZWZpbmUgSEFWRV9FTkdJTkVfTE9BRF9CVUlMVElOX0VOR0lORVMgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGVycm5vLmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX0VSUk5PX0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGVyci5oPiBoZWFkZXIgZmlsZS4gKi8KKy8qICN1bmRlZiBIQVZFX0VSUl9IICovCisjZGVmaW5lIEhBVkVfRVJSX0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGZjbnRsLmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX0ZDTlRMX0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgZmNudGwgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfRkNOVEwgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSBhIHdvcmtpbmcgZmNudGwgT19OT05CTE9DSyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9GQ05UTF9PX05PTkJMT0NLIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBmb3JrJyBmdW5jdGlvbi4gKi8KKy8qICN1bmRlZiBIQVZFX0ZPUksgKi8KKyNkZWZpbmUgSEFWRV9GT1JLIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBmdHJ1bmNhdGUnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX0ZUUlVOQ0FURSAxCisKKy8qIERlZmluZSBpZiBnZXRhZGRyaW5mbyBleGlzdHMgYW5kIHdvcmtzICovCisvKiAjdW5kZWYgSEFWRV9HRVRBRERSSU5GTyAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGdldGV1aWQnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX0dFVEVVSUQgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGdldGhvc3RieWFkZHInIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX0dFVEhPU1RCWUFERFIgMQorCisvKiBJZiB5b3UgaGF2ZSBnZXRob3N0YnluYW1lICovCisjZGVmaW5lIEhBVkVfR0VUSE9TVEJZTkFNRSAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZ2V0aG9zdGJ5bmFtZV9yJyBmdW5jdGlvbi4gKi8KKy8qICN1bmRlZiBIQVZFX0dFVEhPU1RCWU5BTUVfUiAqLworCisvKiBnZXRob3N0YnluYW1lX3IoKSB0YWtlcyAzIGFyZ3MgKi8KKy8qICN1bmRlZiBIQVZFX0dFVEhPU1RCWU5BTUVfUl8zICovCisKKy8qIGdldGhvc3RieW5hbWVfcigpIHRha2VzIDUgYXJncyAqLworLyogI3VuZGVmIEhBVkVfR0VUSE9TVEJZTkFNRV9SXzUgKi8KKworLyogZ2V0aG9zdGJ5bmFtZV9yKCkgdGFrZXMgNiBhcmdzICovCisvKiAjdW5kZWYgSEFWRV9HRVRIT1NUQllOQU1FX1JfNiAxICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBnZXRuYW1laW5mbyBmdW5jdGlvbi4gKi8KKy8qICN1bmRlZiBIQVZFX0dFVE5BTUVJTkZPICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZ2V0cGFzc19yJyBmdW5jdGlvbi4gKi8KKy8qICN1bmRlZiBIQVZFX0dFVFBBU1NfUiAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGdldHByb3RvYnluYW1lJyBmdW5jdGlvbi4gKi8KKy8qICN1bmRlZiBIQVZFX0dFVFBST1RPQllOQU1FICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZ2V0cHd1aWQnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX0dFVFBXVUlEIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBnZXRybGltaXQnIGZ1bmN0aW9uLiAqLworLyogI3VuZGVmIEhBVkVfR0VUUkxJTUlUICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZ2V0dGltZW9mZGF5JyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9HRVRUSU1FT0ZEQVkgMQorCisvKiB3ZSBoYXZlIGEgZ2xpYmMtc3R5bGUgc3RyZXJyb3JfcigpICovCisvKiAjdW5kZWYgSEFWRV9HTElCQ19TVFJFUlJPUl9SICovCisjZGVmaW5lIEhBVkVfR0xJQkNfU1RSRVJST1JfUiAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZ210aW1lX3InIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX0dNVElNRV9SIDEKKworLyogaWYgeW91IGhhdmUgdGhlIGdzc2FwaSBsaWJyYXJpZXMgKi8KKy8qICN1bmRlZiBIQVZFX0dTU0FQSSAqLworCisvKiBpZiB5b3UgaGF2ZSB0aGUgR05VIGdzc2FwaSBsaWJyYXJpZXMgKi8KKy8qICN1bmRlZiBIQVZFX0dTU0dOVSAqLworCisvKiBpZiB5b3UgaGF2ZSB0aGUgSGVpbWRhbCBnc3NhcGkgbGlicmFyaWVzICovCisvKiAjdW5kZWYgSEFWRV9HU1NIRUlNREFMICovCisKKy8qIGlmIHlvdSBoYXZlIHRoZSBNSVQgZ3NzYXBpIGxpYnJhcmllcyAqLworLyogI3VuZGVmIEhBVkVfR1NTTUlUICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgaWNvbnYnIGZ1bmN0aW9ucy4gKi8KKyNkZWZpbmUgSEFWRV9JQ09OViAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgaWRuYV9zdHJlcnJvcicgZnVuY3Rpb24uICovCisvKiAjdW5kZWYgSEFWRV9JRE5BX1NUUkVSUk9SICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgaWRuX2ZyZWUnIGZ1bmN0aW9uLiAqLworLyogI3VuZGVmIEhBVkVfSUROX0ZSRUUgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxpZG4tZnJlZS5oPiBoZWFkZXIgZmlsZS4gKi8KKy8qICN1bmRlZiBIQVZFX0lETl9GUkVFX0ggKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBpbmV0X2FkZHInIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX0lORVRfQUREUiAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIGEgSVB2NiBjYXBhYmxlIHdvcmtpbmcgaW5ldF9udG9wIGZ1bmN0aW9uLiAqLworLyogI3VuZGVmIEhBVkVfSU5FVF9OVE9QICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIGEgSVB2NiBjYXBhYmxlIHdvcmtpbmcgaW5ldF9wdG9uIGZ1bmN0aW9uLiAqLworLyogI3VuZGVmIEhBVkVfSU5FVF9QVE9OICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8aW50dHlwZXMuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfSU5UVFlQRVNfSCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBpb2N0bCBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9JT0NUTCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIGEgd29ya2luZyBpb2N0bCBGSU9OQklPIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX0lPQ1RMX0ZJT05CSU8gMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgaW9jdGxzb2NrZXQgZnVuY3Rpb24uICovCisvKiAjdW5kZWYgSEFWRV9JT0NUTFNPQ0tFVCAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSBhIHdvcmtpbmcgaW9jdGxzb2NrZXQgRklPTkJJTyBmdW5jdGlvbi4gKi8KKy8qICN1bmRlZiBIQVZFX0lPQ1RMU09DS0VUX0ZJT05CSU8gKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIElvY3RsU29ja2V0IGNhbWVsIGNhc2UgZnVuY3Rpb24uICovCisvKiAjdW5kZWYgSEFWRV9JT0NUTFNPQ0tFVF9DQU1FTCAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSBhIHdvcmtpbmcgSW9jdGxTb2NrZXQgY2FtZWwgY2FzZSBGSU9OQklPIGZ1bmN0aW9uLiAqLworLyogI3VuZGVmIEhBVkVfSU9DVExTT0NLRVRfQ0FNRUxfRklPTkJJTyAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGlvLmg+IGhlYWRlciBmaWxlLiAqLworLyogI3VuZGVmIEhBVkVfSU9fSCAqLworCisvKiBpZiB5b3UgaGF2ZSB0aGUgS2VyYmVyb3M0IGxpYnJhcmllcyAoaW5jbHVkaW5nIC1sZGVzKSAqLworLyogI3VuZGVmIEhBVkVfS1JCNCAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGtyYl9nZXRfb3VyX2lwX2Zvcl9yZWFsbScgZnVuY3Rpb24uICovCisvKiAjdW5kZWYgSEFWRV9LUkJfR0VUX09VUl9JUF9GT1JfUkVBTE0gKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxrcmIuaD4gaGVhZGVyIGZpbGUuICovCisvKiAjdW5kZWYgSEFWRV9LUkJfSCAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGxpYmdlbi5oPiBoZWFkZXIgZmlsZS4gKi8KKy8qICN1bmRlZiBIQVZFX0xJQkdFTl9IIDEgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBpZG4nIGxpYnJhcnkgKC1saWRuKS4gKi8KKy8qICN1bmRlZiBIQVZFX0xJQklETiAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHJlc29sdicgbGlicmFyeSAoLWxyZXNvbHYpLiAqLworLyogI3VuZGVmIEhBVkVfTElCUkVTT0xWICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgcmVzb2x2ZScgbGlicmFyeSAoLWxyZXNvbHZlKS4gKi8KKy8qICN1bmRlZiBIQVZFX0xJQlJFU09MVkUgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzb2NrZXQnIGxpYnJhcnkgKC1sc29ja2V0KS4gKi8KKy8qICN1bmRlZiBIQVZFX0xJQlNPQ0tFVCAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHNzbCcgbGlicmFyeSAoLWxzc2wpLiAqLworLyogI3VuZGVmIEhBVkVfTElCU1NMICovCisjZGVmaW5lIEhBVkVfTElCU1NMIDEKKworLyogaWYgemxpYiBpcyBhdmFpbGFibGUgKi8KKy8qICN1bmRlZiBIQVZFX0xJQlogKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxsaW1pdHMuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfTElNSVRTX0ggMQorCisvKiBpZiB5b3VyIGNvbXBpbGVyIHN1cHBvcnRzIExMICovCisjZGVmaW5lIEhBVkVfTEwgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGxvY2FsZS5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9MT0NBTEVfSCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgbG9jYWx0aW1lX3InIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX0xPQ0FMVElNRV9SIDEKKworLyogRGVmaW5lIHRvIDEgaWYgdGhlIGNvbXBpbGVyIHN1cHBvcnRzIHRoZSAnbG9uZyBsb25nJyBkYXRhIHR5cGUuICovCisjZGVmaW5lIEhBVkVfTE9OR0xPTkcgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgbmVlZCB0aGUgbWFsbG9jLmggaGVhZGVyIGZpbGUgZXZlbiB3aXRoIHN0ZGxpYi5oICAqLworLyogI3VuZGVmIE5FRURfTUFMTE9DX0ggKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxtZW1vcnkuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfTUVNT1JZX0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPG5ldGRiLmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX05FVERCX0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPG5ldGluZXQvaW4uaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfTkVUSU5FVF9JTl9IIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxuZXRpbmV0L3RjcC5oPiBoZWFkZXIgZmlsZS4gKi8KKy8qIHVuZGVmIEhBVkVfTkVUSU5FVF9UQ1BfSCAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPG5ldC9pZi5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9ORVRfSUZfSCAxCisKKy8qIERlZmluZSBpZiBOSV9XSVRIU0NPUEVJRCBleGlzdHMgYW5kIHdvcmtzICovCisvKiAjdW5kZWYgSEFWRV9OSV9XSVRIU0NPUEVJRCAqLworCisvKiB3ZSBoYXZlIG5vIHN0cmVycm9yX3IoKSBwcm90byAqLworLyogI3VuZGVmIEhBVkVfTk9fU1RSRVJST1JfUl9ERUNMICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8b3BlbnNzbC9jcnlwdG8uaD4gaGVhZGVyIGZpbGUuICovCisvKiAjdW5kZWYgSEFWRV9PUEVOU1NMX0NSWVBUT19IICovCisjZGVmaW5lIEhBVkVfT1BFTlNTTF9DUllQVE9fSCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8b3BlbnNzbC9lbmdpbmUuaD4gaGVhZGVyIGZpbGUuICovCisvKiAjdW5kZWYgSEFWRV9PUEVOU1NMX0VOR0lORV9IICovCisjZGVmaW5lIEhBVkVfT1BFTlNTTF9FTkdJTkVfSCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8b3BlbnNzbC9lcnIuaD4gaGVhZGVyIGZpbGUuICovCisvKiAjdW5kZWYgSEFWRV9PUEVOU1NMX0VSUl9IICovCisjZGVmaW5lIEhBVkVfT1BFTlNTTF9FUlJfSCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8b3BlbnNzbC9wZW0uaD4gaGVhZGVyIGZpbGUuICovCisvKiAjdW5kZWYgSEFWRV9PUEVOU1NMX1BFTV9IICovCisjZGVmaW5lIEhBVkVfT1BFTlNTTF9QRU1fSCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8b3BlbnNzbC9wa2NzMTIuaD4gaGVhZGVyIGZpbGUuICovCisvKiAjdW5kZWYgSEFWRV9PUEVOU1NMX1BLQ1MxMl9IICovCisjZGVmaW5lIEhBVkVfT1BFTlNTTF9QS0NTMTJfSCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8b3BlbnNzbC9yc2EuaD4gaGVhZGVyIGZpbGUuICovCisvKiAjdW5kZWYgSEFWRV9PUEVOU1NMX1JTQV9IICovCisjZGVmaW5lIEhBVkVfT1BFTlNTTF9SU0FfSCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8b3BlbnNzbC9zc2wuaD4gaGVhZGVyIGZpbGUuICovCisvKiAjdW5kZWYgSEFWRV9PUEVOU1NMX1NTTF9IICovCisjZGVmaW5lIEhBVkVfT1BFTlNTTF9TU0xfSCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8b3BlbnNzbC94NTA5Lmg+IGhlYWRlciBmaWxlLiAqLworLyogI3VuZGVmIEhBVkVfT1BFTlNTTF9YNTA5X0ggKi8KKyNkZWZpbmUgSEFWRV9PUEVOU1NMX1g1MDlfSCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8cGVtLmg+IGhlYWRlciBmaWxlLiAqLworLyogI3VuZGVmIEhBVkVfUEVNX0ggKi8KKyNkZWZpbmUgSEFWRV9QRU1fSCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgcGVycm9yJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9QRVJST1IgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHBpcGUnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX1BJUEUgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHBvbGwnIGZ1bmN0aW9uLiAqLworLyogI3VuZGVmIEhBVkVfUE9MTCAqLworCisvKiBJZiB5b3UgaGF2ZSBhIGZpbmUgcG9sbCAqLworLyogI3VuZGVmIEhBVkVfUE9MTF9GSU5FICovCisKKy8qIHdlIGhhdmUgYSBQT1NJWC1zdHlsZSBzdHJlcnJvcl9yKCkgKi8KKy8qICN1bmRlZiBIQVZFX1BPU0lYX1NUUkVSUk9SX1IgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxwd2QuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfUFdEX0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYFJBTkRfZWdkJyBmdW5jdGlvbi4gKi8KKy8qICN1bmRlZiBIQVZFX1JBTkRfRUdEICovCisjZGVmaW5lIEhBVkVfUkFORF9FR0QgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYFJBTkRfc2NyZWVuJyBmdW5jdGlvbi4gKi8KKy8qICN1bmRlZiBIQVZFX1JBTkRfU0NSRUVOICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgUkFORF9zdGF0dXMnIGZ1bmN0aW9uLiAqLworLyogI3VuZGVmIEhBVkVfUkFORF9TVEFUVVMgKi8KKyNkZWZpbmUgSEFWRV9SQU5EX1NUQVRVUyAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8cnNhLmg+IGhlYWRlciBmaWxlLiAqLworLyogI3VuZGVmIEhBVkVfUlNBX0ggKi8KKyNkZWZpbmUgSEFWRV9SU0FfSCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc2VsZWN0JyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9TRUxFQ1QgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHNldGptcC5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9TRVRKTVBfSCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc2V0bG9jYWxlJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9TRVRMT0NBTEUgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHNldHJsaW1pdCcgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfU0VUUkxJTUlUIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIHNldHNvY2tvcHQgZnVuY3Rpb24uICovCisvKiAjdW5kZWYgSEFWRV9TRVRTT0NLT1BUICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIGEgd29ya2luZyBzZXRzb2Nrb3B0IFNPX05PTkJMT0NLIGZ1bmN0aW9uLiAqLworLyogI3VuZGVmIEhBVkVfU0VUU09DS09QVF9TT19OT05CTE9DSyAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHNndHR5Lmg+IGhlYWRlciBmaWxlLiAqLworLyogI3VuZGVmIEhBVkVfU0dUVFlfSCAxICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc2lnYWN0aW9uJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9TSUdBQ1RJT04gMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHNpZ2ludGVycnVwdCcgZnVuY3Rpb24uICovCisvKiAjdW5kZWYgSEFWRV9TSUdJTlRFUlJVUFQgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzaWduYWwnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX1NJR05BTCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c2lnbmFsLmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX1NJR05BTF9IIDEKKworLyogRGVmaW5lIHRvIDEgaWYgc2lnX2F0b21pY190IGlzIGFuIGF2YWlsYWJsZSB0eXBlZGVmLiAqLworI2RlZmluZSBIQVZFX1NJR19BVE9NSUNfVCAxCisKKy8qIERlZmluZSB0byAxIGlmIHNpZ19hdG9taWNfdCBpcyBhbHJlYWR5IGRlZmluZWQgYXMgdm9sYXRpbGUuICovCisvKiAjdW5kZWYgSEFWRV9TSUdfQVRPTUlDX1RfVk9MQVRJTEUgKi8KKworLyogSWYgeW91IGhhdmUgc2lnc2V0am1wICovCisvKiAjdW5kZWYgSEFWRV9TSUdTRVRKTVAgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzb2NrZXQnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX1NPQ0tFVCAxCisKKy8qIERlZmluZSB0aGlzIGlmIHlvdSBoYXZlIHRoZSBTUE5FR08gbGlicmFyeSBmYm9wZW5zc2wgKi8KKy8qICN1bmRlZiBIQVZFX1NQTkVHTyAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHNzbC5oPiBoZWFkZXIgZmlsZS4gKi8KKy8qICN1bmRlZiBIQVZFX1NTTF9IICovCisjZGVmaW5lIEhBVkVfU1NMX0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN0ZGludC5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9TVERJTlRfSCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3RkbGliLmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX1NURExJQl9IIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzdHJjYXNlY21wJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9TVFJDQVNFQ01QIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzdHJjbXBpJyBmdW5jdGlvbi4gKi8KKy8qICN1bmRlZiBIQVZFX1NUUkNNUEkgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzdHJkdXAnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX1NUUkRVUCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc3RyZXJyb3JfcicgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfU1RSRVJST1JfUiAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc3RyaWNtcCcgZnVuY3Rpb24uICovCisvKiAjdW5kZWYgSEFWRV9TVFJJQ01QICovCisjZGVmaW5lIEhBVkVfU1RSSUNNUCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3RyaW5ncy5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9TVFJJTkdTX0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN0cmluZy5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9TVFJJTkdfSCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc3RybGNhdCcgZnVuY3Rpb24uICovCisvKiAjdW5kZWYgSEFWRV9TVFJMQ0FUICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc3RybGNweScgZnVuY3Rpb24uICovCisvKiAjdW5kZWYgSEFWRV9TVFJMQ1BZICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc3Ryc3RyJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9TVFJTVFIgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHN0cnRva19yJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9TVFJUT0tfUiAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc3RydG9sbCcgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfU1RSVE9MTCAxCisKKy8qIGlmIHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlIGlzIGRlZmluZWQgKi8KKy8qICN1bmRlZiBIQVZFX1NUUlVDVF9TT0NLQUREUl9TVE9SQUdFICovCisKKy8qIERlZmluZSB0aGlzIGlmIHlvdSBoYXZlIHN0cnVjdCB0aW1ldmFsICovCisjZGVmaW5lIEhBVkVfU1RSVUNUX1RJTUVWQUwgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy9maWxpby5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9TWVNfRklMSU9fSCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL2lvY3RsLmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX1NZU19JT0NUTF9IIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvcGFyYW0uaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfU1lTX1BBUkFNX0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy9wb2xsLmg+IGhlYWRlciBmaWxlLiAqLworLyogI3VuZGVmIEhBVkVfU1lTX1BPTExfSCAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy9yZXNvdXJjZS5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9TWVNfUkVTT1VSQ0VfSCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3NlbGVjdC5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9TWVNfU0VMRUNUX0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy9zb2NrZXQuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfU1lTX1NPQ0tFVF9IIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvc29ja2lvLmg+IGhlYWRlciBmaWxlLiAqLworLyogI3VuZGVmIEhBVkVfU1lTX1NPQ0tJT19IICovCisjZGVmaW5lIEhBVkVfU1lTX1NPQ0tJT19IIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvc3RhdC5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9TWVNfU1RBVF9IIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvdGltZS5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9TWVNfVElNRV9IIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvdHlwZXMuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfU1lTX1RZUEVTX0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy91dGltZS5oPiBoZWFkZXIgZmlsZS4gKi8KKy8qICN1bmRlZiBIQVZFX1NZU19VVElNRV9IICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8dGVybWlvcy5oPiBoZWFkZXIgZmlsZS4gKi8KKy8qICN1bmRlZiBIQVZFX1RFUk1JT1NfSCAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHRlcm1pby5oPiBoZWFkZXIgZmlsZS4gKi8KKy8qICN1bmRlZiBIQVZFX1RFUk1JT19IICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8dGltZS5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9USU1FX0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHRsZC5oPiBoZWFkZXIgZmlsZS4gKi8KKy8qICN1bmRlZiBIQVZFX1RMRF9IICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgdGxkX3N0cmVycm9yJyBmdW5jdGlvbi4gKi8KKy8qICN1bmRlZiBIQVZFX1RMRF9TVFJFUlJPUiAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHVuaXN0ZC5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9VTklTVERfSCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgdXRpbWUnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX1VUSU1FIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDx1dGltZS5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9VVElNRV9IIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDx3aW5zb2NrMi5oPiBoZWFkZXIgZmlsZS4gKi8KKy8qICN1bmRlZiBIQVZFX1dJTlNPQ0syX0ggKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDx3aW5zb2NrLmg+IGhlYWRlciBmaWxlLiAqLworLyogI3VuZGVmIEhBVkVfV0lOU09DS19IICovCisKKy8qIERlZmluZSB0aGlzIHN5bWJvbCBpZiB5b3VyIE9TIHN1cHBvcnRzIGNoYW5naW5nIHRoZSBjb250ZW50cyBvZiBhcmd2ICovCisvKiAjdW5kZWYgSEFWRV9XUklUQUJMRV9BUkdWICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSB3czJ0Y3BpcC5oIGhlYWRlciBmaWxlLiAqLworLyogI3VuZGVmIEhBVkVfV1MyVENQSVBfSCAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHg1MDkuaD4gaGVhZGVyIGZpbGUuICovCisvKiAjdW5kZWYgSEFWRV9YNTA5X0ggKi8KKworLyogaWYgeW91IGhhdmUgdGhlIHpsaWIuaCBoZWFkZXIgZmlsZSAqLworLyogI3VuZGVmIEhBVkVfWkxJQl9IICovCisKKy8qIERlZmluZSB0byAxIGlmIF9SRUVOVFJBTlQgcHJlcHJvY2Vzc29yIHN5bWJvbCBtdXN0IGJlIGRlZmluZWQuICovCisvKiAjdW5kZWYgTkVFRF9SRUVOVFJBTlQgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgX1RIUkVBRF9TQUZFIHByZXByb2Nlc3NvciBzeW1ib2wgbXVzdCBiZSBkZWZpbmVkLiAqLworLyogI3VuZGVmIE5FRURfVEhSRUFEX1NBRkUgKi8KKworLyogY3B1LW1hY2hpbmUtT1MgKi8KKyNkZWZpbmUgT1MgInMzOTB4LWlibS10cGYiCisKKy8qIE5hbWUgb2YgcGFja2FnZSAqLworI2RlZmluZSBQQUNLQUdFICJjdXJsIgorCisvKiBEZWZpbmUgdG8gdGhlIGFkZHJlc3Mgd2hlcmUgYnVnIHJlcG9ydHMgZm9yIHRoaXMgcGFja2FnZSBzaG91bGQgYmUgc2VudC4gKi8KKyNkZWZpbmUgUEFDS0FHRV9CVUdSRVBPUlQgImEgc3VpdGFibGUgY3VybCBtYWlsaW5nIGxpc3QgPT4gaHR0cDovL2N1cmwuaGF4eC5zZS9tYWlsLyIKKworLyogRGVmaW5lIHRvIHRoZSBmdWxsIG5hbWUgb2YgdGhpcyBwYWNrYWdlLiAqLworI2RlZmluZSBQQUNLQUdFX05BTUUgImN1cmwiCisKKy8qIERlZmluZSB0byB0aGUgZnVsbCBuYW1lIGFuZCB2ZXJzaW9uIG9mIHRoaXMgcGFja2FnZS4gKi8KKyNkZWZpbmUgUEFDS0FHRV9TVFJJTkcgImN1cmwgLSIKKworLyogRGVmaW5lIHRvIHRoZSBvbmUgc3ltYm9sIHNob3J0IG5hbWUgb2YgdGhpcyBwYWNrYWdlLiAqLworI2RlZmluZSBQQUNLQUdFX1RBUk5BTUUgImN1cmwiCisKKy8qIERlZmluZSB0byB0aGUgdmVyc2lvbiBvZiB0aGlzIHBhY2thZ2UuICovCisjZGVmaW5lIFBBQ0tBR0VfVkVSU0lPTiAiLSIKKworLyogYSBzdWl0YWJsZSBmaWxlIHRvIHJlYWQgcmFuZG9tIGRhdGEgZnJvbSAqLworLyogI3VuZGVmIFJBTkRPTV9GSUxFICovCisKKy8qIERlZmluZSBhcyB0aGUgcmV0dXJuIHR5cGUgb2Ygc2lnbmFsIGhhbmRsZXJzIChgaW50JyBvciBgdm9pZCcpLiAqLworI2RlZmluZSBSRVRTSUdUWVBFIHZvaWQKKworLyogRGVmaW5lIHRvIHRoZSB0eXBlIG9mIGFyZyAxIGZvciBgc2VsZWN0Jy4gKi8KKyNkZWZpbmUgU0VMRUNUX1RZUEVfQVJHMSBpbnQKKworLyogRGVmaW5lIHRvIHRoZSB0eXBlIG9mIGFyZ3MgMiwgMyBhbmQgNCBmb3IgYHNlbGVjdCcuICovCisjZGVmaW5lIFNFTEVDVF9UWVBFX0FSRzIzNCAoZmRfc2V0ICopCisKKy8qIERlZmluZSB0byB0aGUgdHlwZSBvZiBhcmcgNSBmb3IgYHNlbGVjdCcuICovCisjZGVmaW5lIFNFTEVDVF9UWVBFX0FSRzUgKHN0cnVjdCB0aW1ldmFsICopCisKKy8qIFRoZSBzaXplIG9mIGBpbnQnLCBhcyBjb21wdXRlZCBieSBzaXplb2YuICovCisjZGVmaW5lIFNJWkVPRl9JTlQgNAorCisvKiBUaGUgc2l6ZSBvZiBgb2ZmX3QnLCBhcyBjb21wdXRlZCBieSBzaXplb2YuICovCisjZGVmaW5lIFNJWkVPRl9PRkZfVCA4CisKKy8qIFRoZSBzaXplIG9mIGBzaG9ydCcsIGFzIGNvbXB1dGVkIGJ5IHNpemVvZi4gKi8KKyNkZWZpbmUgU0laRU9GX1NIT1JUIDIKKworLyogVGhlIHNpemUgb2YgYHNpemVfdCcsIGFzIGNvbXB1dGVkIGJ5IHNpemVvZi4gKi8KKyNkZWZpbmUgU0laRU9GX1NJWkVfVCA4CisKKy8qIFRoZSBzaXplIG9mIGB0aW1lX3QnLCBhcyBjb21wdXRlZCBieSBzaXplb2YuICovCisjZGVmaW5lIFNJWkVPRl9USU1FX1QgOAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgQU5TSSBDIGhlYWRlciBmaWxlcy4gKi8KKyNkZWZpbmUgU1REQ19IRUFERVJTIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGNhbiBzYWZlbHkgaW5jbHVkZSBib3RoIDxzeXMvdGltZS5oPiBhbmQgPHRpbWUuaD4uICovCisjZGVmaW5lIFRJTUVfV0lUSF9TWVNfVElNRSAxCisKKy8qIERlZmluZSBpZiB5b3Ugd2FudCB0byBlbmFibGUgYXJlcyBzdXBwb3J0ICovCisvKiAjdW5kZWYgVVNFX0FSRVMgKi8KKworLyogRGVmaW5lIHRvIGRpc2FibGUgbm9uLWJsb2NraW5nIHNvY2tldHMgKi8KKy8qICN1bmRlZiBVU0VfQkxPQ0tJTkdfU09DS0VUUyAqLworCisvKiBpZiBHbnVUTFMgaXMgZW5hYmxlZCAqLworLyogI3VuZGVmIFVTRV9HTlVUTFMgKi8KKworLyogSWYgeW91IHdhbnQgdG8gYnVpbGQgY3VybCB3aXRoIHRoZSBidWlsdC1pbiBtYW51YWwgKi8KKy8qICN1bmRlZiBVU0VfTUFOVUFMICovCisKKy8qIGlmIE9wZW5TU0wgaXMgaW4gdXNlICovCisvKiAjdW5kZWYgVVNFX09QRU5TU0wgKi8KKworLyogaWYgU1NMIGlzIGVuYWJsZWQgKi8KKy8qICN1bmRlZiBVU0VfU1NMRUFZICovCisKKy8qIHRvIGVuYWJsZSBTU1BJIHN1cHBvcnQgKi8KKy8qICN1bmRlZiBVU0VfV0lORE9XU19TU1BJICovCisKKy8qIFZlcnNpb24gbnVtYmVyIG9mIHBhY2thZ2UgKi8KKyNkZWZpbmUgVkVSU0lPTiAibm90LXVzZWQiCisKKy8qIERlZmluZSB0byBhdm9pZCBhdXRvbWF0aWMgaW5jbHVzaW9uIG9mIHdpbnNvY2suaCAqLworLyogI3VuZGVmIFdJTjMyX0xFQU5fQU5EX01FQU4gKi8KKworLyogRGVmaW5lIHRvIDEgaWYgb24gQUlYIDMuCisgICBTeXN0ZW0gaGVhZGVycyBzb21ldGltZXMgZGVmaW5lIHRoaXMuCisgICBXZSBqdXN0IHdhbnQgdG8gYXZvaWQgYSByZWRlZmluaXRpb24gZXJyb3IgbWVzc2FnZS4gICovCisjaWZuZGVmIF9BTExfU09VUkNFCisvKiAjIHVuZGVmIF9BTExfU09VUkNFICovCisjZW5kaWYKKworLyogTnVtYmVyIG9mIGJpdHMgaW4gYSBmaWxlIG9mZnNldCwgb24gaG9zdHMgd2hlcmUgdGhpcyBpcyBzZXR0YWJsZS4gKi8KKy8qICN1bmRlZiBfRklMRV9PRkZTRVRfQklUUyAqLworCisvKiBEZWZpbmUgZm9yIGxhcmdlIGZpbGVzLCBvbiBBSVgtc3R5bGUgaG9zdHMuICovCisvKiAjdW5kZWYgX0xBUkdFX0ZJTEVTICovCisKKy8qIERlZmluZSB0byBlbXB0eSBpZiBgY29uc3QnIGRvZXMgbm90IGNvbmZvcm0gdG8gQU5TSSBDLiAqLworLyogI3VuZGVmIGNvbnN0ICovCisKKy8qIHR5cGUgdG8gdXNlIGluIHBsYWNlIG9mIGluX2FkZHJfdCBpZiBub3QgZGVmaW5lZCAqLworLyogI3VuZGVmIGluX2FkZHJfdCAqLworCisvKiBEZWZpbmUgdG8gYHVuc2lnbmVkJyBpZiA8c3lzL3R5cGVzLmg+IGRvZXMgbm90IGRlZmluZS4gKi8KKy8qICN1bmRlZiBzaXplX3QgKi8KKworLyogdGhlIHNpZ25lZCB2ZXJzaW9uIG9mIHNpemVfdCAqLworLyogI3VuZGVmIHNzaXplX3QgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGdldG5hbWVpbmZvIGZ1bmN0aW9uLiAqLworLyogI3VuZGVmIEhBVkVfR0VUTkFNRUlORk8gMSAqLworCisvKiBEZWZpbmUgdG8gdGhlIHR5cGUgcXVhbGlmaWVyIG9mIGFyZyAxIGZvciBnZXRuYW1laW5mby4gKi8KKy8qICN1bmRlZiBHRVROQU1FSU5GT19RVUFMX0FSRzEgY29uc3QgKi8KKworLyogRGVmaW5lIHRvIHRoZSB0eXBlIG9mIGFyZyAxIGZvciBnZXRuYW1laW5mby4gKi8KKy8qICN1bmRlZiBHRVROQU1FSU5GT19UWVBFX0FSRzEgc3RydWN0IHNvY2thZGRyICogKi8KKworLyogRGVmaW5lIHRvIHRoZSB0eXBlIG9mIGFyZyAyIGZvciBnZXRuYW1laW5mby4gKi8KKy8qICN1bmRlZiBHRVROQU1FSU5GT19UWVBFX0FSRzIgc29ja2xlbl90ICovCisKKy8qIERlZmluZSB0byB0aGUgdHlwZSBvZiBhcmdzIDQgYW5kIDYgZm9yIGdldG5hbWVpbmZvLiAqLworLyogI3VuZGVmIEdFVE5BTUVJTkZPX1RZUEVfQVJHNDYgc2l6ZV90ICovCisKKy8qIERlZmluZSB0byB0aGUgdHlwZSBvZiBhcmcgNyBmb3IgZ2V0bmFtZWluZm8uICovCisvKiAjdW5kZWYgR0VUTkFNRUlORk9fVFlQRV9BUkc3IGludCAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgcmVjdiBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9SRUNWIDEKKworLyogRGVmaW5lIHRvIHRoZSB0eXBlIG9mIGFyZyAxIGZvciByZWN2LiAqLworI2RlZmluZSBSRUNWX1RZUEVfQVJHMSBpbnQKKworLyogRGVmaW5lIHRvIHRoZSB0eXBlIG9mIGFyZyAyIGZvciByZWN2LiAqLworI2RlZmluZSBSRUNWX1RZUEVfQVJHMiBjaGFyICoKKworLyogRGVmaW5lIHRvIHRoZSB0eXBlIG9mIGFyZyAzIGZvciByZWN2LiAqLworI2RlZmluZSBSRUNWX1RZUEVfQVJHMyBpbnQKKworLyogRGVmaW5lIHRvIHRoZSB0eXBlIG9mIGFyZyA0IGZvciByZWN2LiAqLworI2RlZmluZSBSRUNWX1RZUEVfQVJHNCBpbnQKKworLyogRGVmaW5lIHRvIHRoZSBmdW5jdGlvbiByZXR1cm4gdHlwZSBmb3IgcmVjdi4gKi8KKyNkZWZpbmUgUkVDVl9UWVBFX1JFVFYgaW50CisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSByZWN2ZnJvbSBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9SRUNWRlJPTSAxCisKKy8qIERlZmluZSB0byB0aGUgdHlwZSBvZiBhcmcgMSBmb3IgcmVjdmZyb20uICovCisjZGVmaW5lIFJFQ1ZGUk9NX1RZUEVfQVJHMSBpbnQKKworLyogRGVmaW5lIHRvIHRoZSB0eXBlIHBvaW50ZWQgYnkgYXJnIDIgZm9yIHJlY3Zmcm9tLiAqLworI2RlZmluZSBSRUNWRlJPTV9UWVBFX0FSRzIgY2hhcgorCisvKiBEZWZpbmUgdG8gdGhlIHR5cGUgb2YgYXJnIDMgZm9yIHJlY3Zmcm9tLiAqLworI2RlZmluZSBSRUNWRlJPTV9UWVBFX0FSRzMgaW50CisKKy8qIERlZmluZSB0byB0aGUgdHlwZSBvZiBhcmcgNCBmb3IgcmVjdmZyb20uICovCisjZGVmaW5lIFJFQ1ZGUk9NX1RZUEVfQVJHNCBpbnQKKworLyogRGVmaW5lIHRvIHRoZSB0eXBlIHBvaW50ZWQgYnkgYXJnIDUgZm9yIHJlY3Zmcm9tLiAqLworI2RlZmluZSBSRUNWRlJPTV9UWVBFX0FSRzUgc3RydWN0IHNvY2thZGRyCisKKy8qIERlZmluZSB0byB0aGUgdHlwZSBwb2ludGVkIGJ5IGFyZyA2IGZvciByZWN2ZnJvbS4gKi8KKyNkZWZpbmUgUkVDVkZST01fVFlQRV9BUkc2IGludAorCisvKiBEZWZpbmUgdG8gdGhlIGZ1bmN0aW9uIHJldHVybiB0eXBlIGZvciByZWN2ZnJvbS4gKi8KKyNkZWZpbmUgUkVDVkZST01fVFlQRV9SRVRWIGludAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgc2VuZCBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9TRU5EIDEKKworLyogRGVmaW5lIHRvIHRoZSB0eXBlIG9mIGFyZyAxIGZvciBzZW5kLiAqLworI2RlZmluZSBTRU5EX1RZUEVfQVJHMSBpbnQKKworLyogRGVmaW5lIHRvIHRoZSB0eXBlIHF1YWxpZmllciBvZiBhcmcgMiBmb3Igc2VuZC4gKi8KKyNkZWZpbmUgU0VORF9RVUFMX0FSRzIgY29uc3QKKworLyogRGVmaW5lIHRvIHRoZSB0eXBlIG9mIGFyZyAyIGZvciBzZW5kLiAqLworI2RlZmluZSBTRU5EX1RZUEVfQVJHMiBjaGFyICoKKworLyogRGVmaW5lIHRvIHRoZSB0eXBlIG9mIGFyZyAzIGZvciBzZW5kLiAqLworI2RlZmluZSBTRU5EX1RZUEVfQVJHMyBpbnQKKworLyogRGVmaW5lIHRvIHRoZSB0eXBlIG9mIGFyZyA0IGZvciBzZW5kLiAqLworI2RlZmluZSBTRU5EX1RZUEVfQVJHNCBpbnQKKworLyogRGVmaW5lIHRvIHRoZSBmdW5jdGlvbiByZXR1cm4gdHlwZSBmb3Igc2VuZC4gKi8KKyNkZWZpbmUgU0VORF9UWVBFX1JFVFYgaW50CisKKyNkZWZpbmUgQ1VSTF9ET0VTX0NPTlZFUlNJT05TCisjaWZuZGVmIENVUkxfSUNPTlZfQ09ERVNFVF9PRl9IT1NUCisjZGVmaW5lIENVUkxfSUNPTlZfQ09ERVNFVF9PRl9IT1NUICJJQk0tMTA0NyIKKyNlbmRpZgorCisKKyNlbmRpZiAvKiBfX0xJQkNPTkZJR1RQRl9IICovCmRpZmYgLS1naXQgYS9saWIvY3VybF9jb25maWcuaCBiL2xpYi9jb25maWctdnh3b3Jrcy5oCnNpbWlsYXJpdHkgaW5kZXggODUlCnJlbmFtZSBmcm9tIGxpYi9jdXJsX2NvbmZpZy5oCnJlbmFtZSB0byBsaWIvY29uZmlnLXZ4d29ya3MuaAppbmRleCAwYTBlNjI2Li5mNzc5N2ZkIDEwMDY0NAotLS0gYS9saWIvY3VybF9jb25maWcuaAorKysgYi9saWIvY29uZmlnLXZ4d29ya3MuaApAQCAtMSwxMSArMSwxNSBAQAotLyogbGliL2N1cmxfY29uZmlnLmguICBHZW5lcmF0ZWQgZnJvbSBjdXJsX2NvbmZpZy5oLmluIGJ5IGNvbmZpZ3VyZS4gICovCi0vKiBsaWIvY3VybF9jb25maWcuaC5pbi4gIEdlbmVyYXRlZCBmcm9tIGNvbmZpZ3VyZS5hYyBieSBhdXRvaGVhZGVyLiAgKi8KKyNpZm5kZWYgX19MSUJfQ09ORklHX1ZYV09SS1NfSAorI2RlZmluZSBfX0xJQl9DT05GSUdfVlhXT1JLU19ICisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworLyogICBsaWIvY29uZmlnLXZ4d29ya3MuaCAtIEhhbmQgY3JhZnRlZCBjb25maWcgZmlsZSBmb3IgVnhXb3JrcyAgICovCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KIAogLyogd2hlbiBidWlsZGluZyBsaWJjdXJsIGl0c2VsZiAqLwogLyogI3VuZGVmIEJVSUxESU5HX0xJQkNVUkwgKi8KIAogLyogTG9jYXRpb24gb2YgZGVmYXVsdCBjYSBidW5kbGUgKi8KLSNkZWZpbmUgQ1VSTF9DQV9CVU5ETEUgIi9ldGMvc3NsL2NlcnRzL2NhLWNlcnRpZmljYXRlcy5jcnQiCisvKiAjdW5kZWYgQ1VSTF9DQV9CVU5ETEUgKi8KIAogLyogTG9jYXRpb24gb2YgZGVmYXVsdCBjYSBwYXRoICovCiAvKiAjdW5kZWYgQ1VSTF9DQV9QQVRIICovCkBAIC0yMywzNyArMjcsMjggQEAKIC8qICN1bmRlZiBDVVJMX0RJU0FCTEVfRklMRSAqLwogCiAvKiB0byBkaXNhYmxlIEZUUCAqLwotLyogI3VuZGVmIENVUkxfRElTQUJMRV9GVFAgKi8KKyNkZWZpbmUgQ1VSTF9ESVNBQkxFX0ZUUCAxCiAKIC8qIHRvIGRpc2FibGUgSFRUUCAqLwogLyogI3VuZGVmIENVUkxfRElTQUJMRV9IVFRQICovCiAKLS8qIHRvIGRpc2FibGUgSU1BUCAqLwotLyogI3VuZGVmIENVUkxfRElTQUJMRV9JTUFQICovCi0KIC8qIHRvIGRpc2FibGUgTERBUCAqLwogI2RlZmluZSBDVVJMX0RJU0FCTEVfTERBUCAxCiAKIC8qIHRvIGRpc2FibGUgTERBUFMgKi8KICNkZWZpbmUgQ1VSTF9ESVNBQkxFX0xEQVBTIDEKIAotLyogdG8gZGlzYWJsZSBQT1AzICovCi0vKiAjdW5kZWYgQ1VSTF9ESVNBQkxFX1BPUDMgKi8KKy8qIHRvIGRpc2FibGUgTlRMTSBhdXRoZW50aWNhdGlvbiAqLworI2RlZmluZSBDVVJMX0RJU0FCTEVfTlRMTSAxCiAKIC8qIHRvIGRpc2FibGUgcHJveGllcyAqLwogLyogI3VuZGVmIENVUkxfRElTQUJMRV9QUk9YWSAqLwogCi0vKiB0byBkaXNhYmxlIFJUU1AgKi8KLS8qICN1bmRlZiBDVVJMX0RJU0FCTEVfUlRTUCAqLwotCi0vKiB0byBkaXNhYmxlIFNNVFAgKi8KLS8qICN1bmRlZiBDVVJMX0RJU0FCTEVfU01UUCAqLwotCiAvKiB0byBkaXNhYmxlIFRFTE5FVCAqLwotLyogI3VuZGVmIENVUkxfRElTQUJMRV9URUxORVQgKi8KKyNkZWZpbmUgQ1VSTF9ESVNBQkxFX1RFTE5FVCAxCiAKIC8qIHRvIGRpc2FibGUgVEZUUCAqLwotLyogI3VuZGVmIENVUkxfRElTQUJMRV9URlRQICovCisjZGVmaW5lIENVUkxfRElTQUJMRV9URlRQIDEKIAogLyogdG8gZGlzYWJsZSB2ZXJib3NlIHN0cmluZ3MgKi8KIC8qICN1bmRlZiBDVVJMX0RJU0FCTEVfVkVSQk9TRV9TVFJJTkdTICovCkBAIC02NCwxMCArNTksNyBAQAogLyogdG8gZW5hYmxlIGhpZGRlbiBzeW1ib2xzICovCiAvKiAjdW5kZWYgQ1VSTF9ISURERU5fU1lNQk9MUyAqLwogCi0vKiBXJCBMREFQIHdpdGggbm9uLVckIGNvbXBpbGVyICovCi0vKiAjdW5kZWYgQ1VSTF9MREFQX0hZQlJJRCAqLwotCi0vKiBVc2UgVyQgTERBUCBpbXBsZW1lbnRhdGlvbiAqLworLyogVXNlIFdpbmRvd3MgTERBUCBpbXBsZW1lbnRhdGlvbiAqLwogLyogI3VuZGVmIENVUkxfTERBUF9XSU4gKi8KIAogLyogd2hlbiBub3QgYnVpbGRpbmcgYSBzaGFyZWQgbGlicmFyeSAqLwpAQCAtODksNyArODEsNyBAQAogI2RlZmluZSBHRVROQU1FSU5GT19UWVBFX0FSRzIgc29ja2xlbl90CiAKIC8qIERlZmluZSB0byB0aGUgdHlwZSBvZiBhcmdzIDQgYW5kIDYgZm9yIGdldG5hbWVpbmZvLiAqLwotI2RlZmluZSBHRVROQU1FSU5GT19UWVBFX0FSRzQ2IHNvY2tsZW5fdAorI2RlZmluZSBHRVROQU1FSU5GT19UWVBFX0FSRzQ2IHNpemVfdAogCiAvKiBEZWZpbmUgdG8gdGhlIHR5cGUgb2YgYXJnIDcgZm9yIGdldG5hbWVpbmZvLiAqLwogI2RlZmluZSBHRVROQU1FSU5GT19UWVBFX0FSRzcgdW5zaWduZWQgaW50CkBAIC0xMTAsMjkgKzEwMiwyMyBAQAogI2RlZmluZSBIQVZFX0FSUEFfSU5FVF9IIDEKIAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxhcnBhL3RmdHAuaD4gaGVhZGVyIGZpbGUuICovCi0jZGVmaW5lIEhBVkVfQVJQQV9URlRQX0ggMQorLyogI3VuZGVmIEhBVkVfQVJQQV9URlRQX0ggKi8KIAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxhc3NlcnQuaD4gaGVhZGVyIGZpbGUuICovCiAjZGVmaW5lIEhBVkVfQVNTRVJUX0ggMQogCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYmFzZW5hbWUgZnVuY3Rpb24uICovCi0jZGVmaW5lIEhBVkVfQkFTRU5BTUUgMQorLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBiYXNlbmFtZScgZnVuY3Rpb24uICovCisvKiAjdW5kZWYgSEFWRV9CQVNFTkFNRSAqLwogCiAvKiBEZWZpbmUgdG8gMSBpZiBib29sIGlzIGFuIGF2YWlsYWJsZSB0eXBlLiAqLwogI2RlZmluZSBIQVZFX0JPT0xfVCAxCiAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBjbG9ja19nZXR0aW1lIGZ1bmN0aW9uIGFuZCBtb25vdG9uaWMgdGltZXIuICovCi0jZGVmaW5lIEhBVkVfQ0xPQ0tfR0VUVElNRV9NT05PVE9OSUMgMQorLyogI3VuZGVmIEhBVkVfQ0xPQ0tfR0VUVElNRV9NT05PVE9OSUMgKi8KIAotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGNsb3Nlc29ja2V0IGZ1bmN0aW9uLiAqLworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBjbG9zZXNvY2tldCcgZnVuY3Rpb24uICovCiAvKiAjdW5kZWYgSEFWRV9DTE9TRVNPQ0tFVCAqLwogCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgQ2xvc2VTb2NrZXQgY2FtZWwgY2FzZSBmdW5jdGlvbi4gKi8KLS8qICN1bmRlZiBIQVZFX0NMT1NFU09DS0VUX0NBTUVMICovCi0KLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBjb25uZWN0IGZ1bmN0aW9uLiAqLwotI2RlZmluZSBIQVZFX0NPTk5FQ1QgMQotCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYENSWVBUT19jbGVhbnVwX2FsbF9leF9kYXRhJyBmdW5jdGlvbi4gKi8KICNkZWZpbmUgSEFWRV9DUllQVE9fQ0xFQU5VUF9BTExfRVhfREFUQSAxCiAKQEAgLTE0NSwxMSArMTMxLDggQEAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8ZGxmY24uaD4gaGVhZGVyIGZpbGUuICovCiAjZGVmaW5lIEhBVkVfRExGQ05fSCAxCiAKLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgRU5HSU5FX2NsZWFudXAnIGZ1bmN0aW9uLiAqLwotLy8jZGVmaW5lIEhBVkVfRU5HSU5FX0NMRUFOVVAgMQotCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYEVOR0lORV9sb2FkX2J1aWx0aW5fZW5naW5lcycgZnVuY3Rpb24uICovCi0vLyNkZWZpbmUgSEFWRV9FTkdJTkVfTE9BRF9CVUlMVElOX0VOR0lORVMgMQorI2RlZmluZSBIQVZFX0VOR0lORV9MT0FEX0JVSUxUSU5fRU5HSU5FUyAxCiAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8ZXJybm8uaD4gaGVhZGVyIGZpbGUuICovCiAjZGVmaW5lIEhBVkVfRVJSTk9fSCAxCkBAIC0xNzYsOCArMTU5LDcgQEAKICNkZWZpbmUgSEFWRV9GUkVFQUREUklORk8gMQogCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgZnJlZWlmYWRkcnMgZnVuY3Rpb24uICovCi0vLyBub3QgaW4gYmlvbmljCi0vLyNkZWZpbmUgSEFWRV9GUkVFSUZBRERSUyAxCisjZGVmaW5lIEhBVkVfRlJFRUlGQUREUlMgMQogCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgZnRydW5jYXRlIGZ1bmN0aW9uLiAqLwogI2RlZmluZSBIQVZFX0ZUUlVOQ0FURSAxCkBAIC0xODUsMTEgKzE2Nyw4IEBACiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSBhIHdvcmtpbmcgZ2V0YWRkcmluZm8gZnVuY3Rpb24uICovCiAjZGVmaW5lIEhBVkVfR0VUQUREUklORk8gMQogCi0vKiBEZWZpbmUgdG8gMSBpZiB0aGUgZ2V0YWRkcmluZm8gZnVuY3Rpb24gaXMgdGhyZWFkc2FmZS4gKi8KLSNkZWZpbmUgSEFWRV9HRVRBRERSSU5GT19USFJFQURTQUZFIDEKLQogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBnZXRldWlkJyBmdW5jdGlvbi4gKi8KLSNkZWZpbmUgSEFWRV9HRVRFVUlEIDEKKy8qICN1bmRlZiBIQVZFX0dFVEVVSUQgKi8KIAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGdldGhvc3RieWFkZHIgZnVuY3Rpb24uICovCiAjZGVmaW5lIEhBVkVfR0VUSE9TVEJZQUREUiAxCkBAIC0yMTAsNyArMTg5LDcgQEAKICNkZWZpbmUgSEFWRV9HRVRIT1NUQllOQU1FIDEKIAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGdldGhvc3RieW5hbWVfciBmdW5jdGlvbi4gKi8KLSNkZWZpbmUgSEFWRV9HRVRIT1NUQllOQU1FX1IgMQorLyogI3VuZGVmIEhBVkVfR0VUSE9TVEJZTkFNRV9SICovCiAKIC8qIGdldGhvc3RieW5hbWVfcigpIHRha2VzIDMgYXJncyAqLwogLyogI3VuZGVmIEhBVkVfR0VUSE9TVEJZTkFNRV9SXzMgKi8KQEAgLTIxOSwxNCArMTk4LDEzIEBACiAvKiAjdW5kZWYgSEFWRV9HRVRIT1NUQllOQU1FX1JfNSAqLwogCiAvKiBnZXRob3N0YnluYW1lX3IoKSB0YWtlcyA2IGFyZ3MgKi8KLSNkZWZpbmUgSEFWRV9HRVRIT1NUQllOQU1FX1JfNiAxCisvKiAjdW5kZWYgSEFWRV9HRVRIT1NUQllOQU1FX1JfNiAqLwogCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgZ2V0aG9zdG5hbWUgZnVuY3Rpb24uICovCiAjZGVmaW5lIEhBVkVfR0VUSE9TVE5BTUUgMQogCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSBhIHdvcmtpbmcgZ2V0aWZhZGRycyBmdW5jdGlvbi4gKi8KLS8vIG5vdCBpbiBiaW9uaWMKLS8vI2RlZmluZSBIQVZFX0dFVElGQUREUlMgMQorLyogI3VuZGVmIEhBVkVfR0VUSUZBRERSUyAqLwogCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgZ2V0bmFtZWluZm8gZnVuY3Rpb24uICovCiAjZGVmaW5lIEhBVkVfR0VUTkFNRUlORk8gMQpAQCAtMjQxLDE2ICsyMTksMTYgQEAKICNkZWZpbmUgSEFWRV9HRVRQUk9UT0JZTkFNRSAxCiAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZ2V0cHd1aWQnIGZ1bmN0aW9uLiAqLwotI2RlZmluZSBIQVZFX0dFVFBXVUlEIDEKKy8qICN1bmRlZiBIQVZFX0dFVFBXVUlEICovCiAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZ2V0cmxpbWl0JyBmdW5jdGlvbi4gKi8KICNkZWZpbmUgSEFWRV9HRVRSTElNSVQgMQogCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgZ2V0c2VydmJ5cG9ydF9yIGZ1bmN0aW9uLiAqLwotI2RlZmluZSBIQVZFX0dFVFNFUlZCWVBPUlRfUiAxCisvKiAjdW5kZWYgSEFWRV9HRVRTRVJWQllQT1JUX1IgKi8KIAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBnZXR0aW1lb2ZkYXknIGZ1bmN0aW9uLiAqLwotI2RlZmluZSBIQVZFX0dFVFRJTUVPRkRBWSAxCisvKiAjdW5kZWYgSEFWRV9HRVRUSU1FT0ZEQVkgKi8KIAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgYSB3b3JraW5nIGdsaWJjLXN0eWxlIHN0cmVycm9yX3IgZnVuY3Rpb24uICovCiAvKiAjdW5kZWYgSEFWRV9HTElCQ19TVFJFUlJPUl9SICovCkBAIC0yODksOCArMjY3LDcgQEAKIC8qICN1bmRlZiBIQVZFX0lETl9GUkVFX0ggKi8KIAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxpZmFkZHJzLmg+IGhlYWRlciBmaWxlLiAqLwotLy8gbm90IGluIGJpb25pYwotLy8gI2RlZmluZSBIQVZFX0lGQUREUlNfSCAxCisvKiAjdW5kZWYgSEFWRV9JRkFERFJTX0ggKi8KIAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBpbmV0X2FkZHInIGZ1bmN0aW9uLiAqLwogI2RlZmluZSBIQVZFX0lORVRfQUREUiAxCkBAIC0zMDUsMTcgKzI4MiwxNSBAQAogLyogI3VuZGVmIEhBVkVfSU5FVF9OVE9BX1JfMyAqLwogCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSBhIElQdjYgY2FwYWJsZSB3b3JraW5nIGluZXRfbnRvcCBmdW5jdGlvbi4gKi8KLSNkZWZpbmUgSEFWRV9JTkVUX05UT1AgMQorLyogI3VuZGVmIEhBVkVfSU5FVF9OVE9QICovCiAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIGEgSVB2NiBjYXBhYmxlIHdvcmtpbmcgaW5ldF9wdG9uIGZ1bmN0aW9uLiAqLwotI2RlZmluZSBIQVZFX0lORVRfUFRPTiAxCisvKiAjdW5kZWYgSEFWRV9JTkVUX1BUT04gKi8KIAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxpbnR0eXBlcy5oPiBoZWFkZXIgZmlsZS4gKi8KICNkZWZpbmUgSEFWRV9JTlRUWVBFU19IIDEKIAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGlvY3RsIGZ1bmN0aW9uLiAqLwotLy8gRGVmaW5lZCBieSBBbmRyb2lkQ29uZmlnLmggdGhhdCBpcyBhdXRvbXRpY2FseSBpbmNsdWRlZCBpbiBidWlsZHMKLSN1bmRlZiBIQVZFX0lPQ1RMCiAjZGVmaW5lIEhBVkVfSU9DVEwgMQogCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgaW9jdGxzb2NrZXQgZnVuY3Rpb24uICovCkBAIC0zMzgsNyArMzEzLDcgQEAKICNkZWZpbmUgSEFWRV9JT0NUTF9TSU9DR0lGQUREUiAxCiAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8aW8uaD4gaGVhZGVyIGZpbGUuICovCi0vKiAjdW5kZWYgSEFWRV9JT19IICovCisjZGVmaW5lIEhBVkVfSU9fSCAxCiAKIC8qIGlmIHlvdSBoYXZlIHRoZSBLZXJiZXJvczQgbGlicmFyaWVzIChpbmNsdWRpbmcgLWxkZXMpICovCiAvKiAjdW5kZWYgSEFWRV9LUkI0ICovCkBAIC0zNjgsNyArMzQzLDcgQEAKIC8qICN1bmRlZiBIQVZFX0xEQVBfVVJMX1BBUlNFICovCiAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8bGliZ2VuLmg+IGhlYWRlciBmaWxlLiAqLwotI2RlZmluZSBIQVZFX0xJQkdFTl9IIDEKKy8qICN1bmRlZiBIQVZFX0xJQkdFTl9IICovCiAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgaWRuJyBsaWJyYXJ5ICgtbGlkbikuICovCiAvKiAjdW5kZWYgSEFWRV9MSUJJRE4gKi8KQEAgLTM3OSw2ICszNTQsOSBAQAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGByZXNvbHZlJyBsaWJyYXJ5ICgtbHJlc29sdmUpLiAqLwogLyogI3VuZGVmIEhBVkVfTElCUkVTT0xWRSAqLwogCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHNvY2tldCcgbGlicmFyeSAoLWxzb2NrZXQpLiAqLworLyogI3VuZGVmIEhBVkVfTElCU09DS0VUICovCisKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc3NoMicgbGlicmFyeSAoLWxzc2gyKS4gKi8KIC8qICN1bmRlZiBIQVZFX0xJQlNTSDIgKi8KIApAQCAtNDEwLDE4ICszODgsMTMgQEAKICNkZWZpbmUgSEFWRV9MT05HTE9ORyAxCiAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBtYWxsb2MuaCBoZWFkZXIgZmlsZS4gKi8KLS8vIERlZmluZWQgYnkgQW5kcm9pZENvbmZpZy5oIHRoYXQgaXMgYXV0b210aWNhbHkgaW5jbHVkZWQgaW4gYnVpbGRzCi0jdW5kZWYgSEFWRV9NQUxMT0NfSAogI2RlZmluZSBIQVZFX01BTExPQ19IIDEKIAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIG1lbW9yeS5oIGhlYWRlciBmaWxlLiAqLwogI2RlZmluZSBIQVZFX01FTU9SWV9IIDEKIAotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIG1lbXJjaHIgZnVuY3Rpb24gb3IgbWFjcm8uICovCi0vKiAjdW5kZWYgSEFWRV9NRU1SQ0hSICovCi0KIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBNU0dfTk9TSUdOQUwgZmxhZy4gKi8KLSNkZWZpbmUgSEFWRV9NU0dfTk9TSUdOQUwgMQorLyogI3VuZGVmIEhBVkVfTVNHX05PU0lHTkFMICovCiAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8bmV0ZGIuaD4gaGVhZGVyIGZpbGUuICovCiAjZGVmaW5lIEhBVkVfTkVUREJfSCAxCkBAIC00NDYsNyArNDE5LDcgQEAKICNkZWZpbmUgSEFWRV9PUEVOU1NMX0NSWVBUT19IIDEKIAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxvcGVuc3NsL2VuZ2luZS5oPiBoZWFkZXIgZmlsZS4gKi8KLS8vI2RlZmluZSBIQVZFX09QRU5TU0xfRU5HSU5FX0ggMQorI2RlZmluZSBIQVZFX09QRU5TU0xfRU5HSU5FX0ggMQogCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPG9wZW5zc2wvZXJyLmg+IGhlYWRlciBmaWxlLiAqLwogI2RlZmluZSBIQVZFX09QRU5TU0xfRVJSX0ggMQpAQCAtNDc5LDE5ICs0NTIsMTkgQEAKIC8qICN1bmRlZiBIQVZFX1BLMTFfQ1JFQVRFR0VORVJJQ09CSkVDVCAqLwogCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSBhIHdvcmtpbmcgcG9sbCBmdW5jdGlvbi4gKi8KLSNkZWZpbmUgSEFWRV9QT0xMIDEKKy8qICN1bmRlZiBIQVZFX1BPTEwgKi8KIAogLyogSWYgeW91IGhhdmUgYSBmaW5lIHBvbGwgKi8KLSNkZWZpbmUgSEFWRV9QT0xMX0ZJTkUgMQorLyogI3VuZGVmIEhBVkVfUE9MTF9GSU5FICovCiAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8cG9sbC5oPiBoZWFkZXIgZmlsZS4gKi8KLSNkZWZpbmUgSEFWRV9QT0xMX0ggMQorLyogI3VuZGVmIEhBVkVfUE9MTF9IICovCiAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIGEgd29ya2luZyBQT1NJWC1zdHlsZSBzdHJlcnJvcl9yIGZ1bmN0aW9uLiAqLwotI2RlZmluZSBIQVZFX1BPU0lYX1NUUkVSUk9SX1IgMQorLyogI3VuZGVmIEhBVkVfUE9TSVhfU1RSRVJST1JfUiAqLwogCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHB3ZC5oPiBoZWFkZXIgZmlsZS4gKi8KLSNkZWZpbmUgSEFWRV9QV0RfSCAxCisvKiAjdW5kZWYgSEFWRV9QV0RfSCAqLwogCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYFJBTkRfZWdkJyBmdW5jdGlvbi4gKi8KICNkZWZpbmUgSEFWRV9SQU5EX0VHRCAxCkBAIC01MjQsNyArNDk3LDcgQEAKICNkZWZpbmUgSEFWRV9TRVRMT0NBTEUgMQogCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHNldG1vZGUnIGZ1bmN0aW9uLiAqLwotLyogI3VuZGVmIEhBVkVfU0VUTU9ERSAqLworI2RlZmluZSBIQVZFX1NFVE1PREUgMQogCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHNldHJsaW1pdCcgZnVuY3Rpb24uICovCiAjZGVmaW5lIEhBVkVfU0VUUkxJTUlUIDEKQEAgLTUzNiw3ICs1MDksNyBAQAogLyogI3VuZGVmIEhBVkVfU0VUU09DS09QVF9TT19OT05CTE9DSyAqLwogCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHNndHR5Lmg+IGhlYWRlciBmaWxlLiAqLwotI2RlZmluZSBIQVZFX1NHVFRZX0ggMQorLyogI3VuZGVmIEhBVkVfU0dUVFlfSCAqLwogCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgc2lnYWN0aW9uIGZ1bmN0aW9uLiAqLwogI2RlZmluZSBIQVZFX1NJR0FDVElPTiAxCkBAIC01NTEsNyArNTI0LDcgQEAKICNkZWZpbmUgSEFWRV9TSUdOQUxfSCAxCiAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBzaWdzZXRqbXAgZnVuY3Rpb24gb3IgbWFjcm8uICovCi0jZGVmaW5lIEhBVkVfU0lHU0VUSk1QIDEKKy8qICN1bmRlZiBIQVZFX1NJR1NFVEpNUCAqLwogCiAvKiBEZWZpbmUgdG8gMSBpZiBzaWdfYXRvbWljX3QgaXMgYW4gYXZhaWxhYmxlIHR5cGVkZWYuICovCiAjZGVmaW5lIEhBVkVfU0lHX0FUT01JQ19UIDEKQEAgLTU2MiwxMiArNTM1LDkgQEAKIC8qIERlZmluZSB0byAxIGlmIHN0cnVjdCBzb2NrYWRkcl9pbjYgaGFzIHRoZSBzaW42X3Njb3BlX2lkIG1lbWJlciAqLwogI2RlZmluZSBIQVZFX1NPQ0tBRERSX0lONl9TSU42X1NDT1BFX0lEIDEKIAotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIHNvY2tldCBmdW5jdGlvbi4gKi8KKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc29ja2V0JyBmdW5jdGlvbi4gKi8KICNkZWZpbmUgSEFWRV9TT0NLRVQgMQogCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHNvY2tldC5oPiBoZWFkZXIgZmlsZS4gKi8KLS8qICN1bmRlZiBIQVZFX1NPQ0tFVF9IICovCi0KIC8qIERlZmluZSB0aGlzIGlmIHlvdSBoYXZlIHRoZSBTUE5FR08gbGlicmFyeSBmYm9wZW5zc2wgKi8KIC8qICN1bmRlZiBIQVZFX1NQTkVHTyAqLwogCkBAIC01ODEsNyArNTUxLDcgQEAKICNkZWZpbmUgSEFWRV9TVERCT09MX0ggMQogCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN0ZGludC5oPiBoZWFkZXIgZmlsZS4gKi8KLSNkZWZpbmUgSEFWRV9TVERJTlRfSCAxCisvKiAjdW5kZWYgSEFWRV9TVERJTlRfSCAqLwogCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN0ZGlvLmg+IGhlYWRlciBmaWxlLiAqLwogI2RlZmluZSBIQVZFX1NURElPX0ggMQpAQCAtNjI5LDggKzU5OSw3IEBACiAvKiAjdW5kZWYgSEFWRV9TVFJOSUNNUCAqLwogCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN0cm9wdHMuaD4gaGVhZGVyIGZpbGUuICovCi0vLyBub3QgaW4gYmlvbmljCi0vLyNkZWZpbmUgSEFWRV9TVFJPUFRTX0ggMQorLyogI3VuZGVmIEhBVkVfU1RST1BUU19IICovCiAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBzdHJzdHIgZnVuY3Rpb24uICovCiAjZGVmaW5lIEhBVkVfU1RSU1RSIDEKQEAgLTYzOSw3ICs2MDgsNyBAQAogI2RlZmluZSBIQVZFX1NUUlRPS19SIDEKIAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIHN0cnRvbGwgZnVuY3Rpb24uICovCi0jZGVmaW5lIEhBVkVfU1RSVE9MTCAxCisvKiAjdW5kZWYgSEFWRV9TVFJUT0xMICovCiAKIC8qIGlmIHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlIGlzIGRlZmluZWQgKi8KICNkZWZpbmUgSEFWRV9TVFJVQ1RfU09DS0FERFJfU1RPUkFHRSAxCkBAIC02NTQsMTYgKzYyMywxNiBAQAogI2RlZmluZSBIQVZFX1NZU19JT0NUTF9IIDEKIAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvcGFyYW0uaD4gaGVhZGVyIGZpbGUuICovCi0jZGVmaW5lIEhBVkVfU1lTX1BBUkFNX0ggMQorLyogI3VuZGVmIEhBVkVfU1lTX1BBUkFNX0ggKi8KIAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvcG9sbC5oPiBoZWFkZXIgZmlsZS4gKi8KLSNkZWZpbmUgSEFWRV9TWVNfUE9MTF9IIDEKKy8qICN1bmRlZiBIQVZFX1NZU19QT0xMX0ggKi8KIAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvcmVzb3VyY2UuaD4gaGVhZGVyIGZpbGUuICovCiAjZGVmaW5lIEhBVkVfU1lTX1JFU09VUkNFX0ggMQogCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy9zZWxlY3QuaD4gaGVhZGVyIGZpbGUuICovCi0jZGVmaW5lIEhBVkVfU1lTX1NFTEVDVF9IIDEKKy8qICN1bmRlZiBIQVZFX1NZU19TRUxFQ1RfSCAqLwogCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy9zb2NrZXQuaD4gaGVhZGVyIGZpbGUuICovCiAjZGVmaW5lIEhBVkVfU1lTX1NPQ0tFVF9IIDEKQEAgLTY3NSwyOCArNjQ0LDI0IEBACiAjZGVmaW5lIEhBVkVfU1lTX1NUQVRfSCAxCiAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3RpbWUuaD4gaGVhZGVyIGZpbGUuICovCi0jZGVmaW5lIEhBVkVfU1lTX1RJTUVfSCAxCisvKiAjdW5kZWYgSEFWRV9TWVNfVElNRV9IICovCiAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3R5cGVzLmg+IGhlYWRlciBmaWxlLiAqLwogI2RlZmluZSBIQVZFX1NZU19UWVBFU19IIDEKIAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvdWlvLmg+IGhlYWRlciBmaWxlLiAqLwotLy8gRGVmaW5lZCBieSBBbmRyb2lkQ29uZmlnLmggdGhhdCBpcyBhdXRvbXRpY2FseSBpbmNsdWRlZCBpbiBidWlsZHMKLSN1bmRlZiBIQVZFX1NZU19VSU9fSAogI2RlZmluZSBIQVZFX1NZU19VSU9fSCAxCiAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3VuLmg+IGhlYWRlciBmaWxlLiAqLwogI2RlZmluZSBIQVZFX1NZU19VTl9IIDEKIAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvdXRpbWUuaD4gaGVhZGVyIGZpbGUuICovCi0vKiAjdW5kZWYgSEFWRV9TWVNfVVRJTUVfSCAqLworI2RlZmluZSBIQVZFX1NZU19VVElNRV9IIDEKIAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDx0ZXJtaW9zLmg+IGhlYWRlciBmaWxlLiAqLwogI2RlZmluZSBIQVZFX1RFUk1JT1NfSCAxCiAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8dGVybWlvLmg+IGhlYWRlciBmaWxlLiAqLwotLy8gRGVmaW5lZCBieSBBbmRyb2lkQ29uZmlnLmggdGhhdCBpcyBhdXRvbXRpY2FseSBpbmNsdWRlZCBpbiBidWlsZHMKLSN1bmRlZiBIQVZFX1RFUk1JT19ICiAjZGVmaW5lIEhBVkVfVEVSTUlPX0ggMQogCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHRpbWUuaD4gaGVhZGVyIGZpbGUuICovCkBAIC03MjYsNiArNjkxLDkgQEAKIC8qIERlZmluZSB0byAxIGlmIGNvbXBpbGVyIHN1cHBvcnRzIG9sZCBnY2MgdmFyaWFkaWMgbWFjcm8gc3R5bGUuICovCiAjZGVmaW5lIEhBVkVfVkFSSUFESUNfTUFDUk9TX0dDQyAxCiAKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIGEgd29ya2luZyB2eHdvcmtzLXN0eWxlIHN0cmVycm9yX3IgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfVlhXT1JLU19TVFJFUlJPUl9SIDEKKwogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIHdpbmJlci5oIGhlYWRlciBmaWxlLiAqLwogLyogI3VuZGVmIEhBVkVfV0lOQkVSX0ggKi8KIApAQCAtNzU2LDEwICs3MjQsNiBAQAogLyogaWYgeW91IGhhdmUgdGhlIHpsaWIuaCBoZWFkZXIgZmlsZSAqLwogI2RlZmluZSBIQVZFX1pMSUJfSCAxCiAKLS8qIERlZmluZSB0byB0aGUgc3ViLWRpcmVjdG9yeSBpbiB3aGljaCBsaWJ0b29sIHN0b3JlcyB1bmluc3RhbGxlZCBsaWJyYXJpZXMuCi0gICAqLwotI2RlZmluZSBMVF9PQkpESVIgIi5saWJzLyIKLQogLyogRGVmaW5lIHRvIDEgaWYgeW91IGFyZSBidWlsZGluZyBhIG5hdGl2ZSBXaW5kb3dzIHRhcmdldC4gKi8KIC8qICN1bmRlZiBOQVRJVkVfV0lORE9XUyAqLwogCkBAIC03NzgsMzAgKzc0MiwxNSBAQAogLyogRGVmaW5lIHRvIDEgaWYgX1RIUkVBRF9TQUZFIHByZXByb2Nlc3NvciBzeW1ib2wgbXVzdCBiZSBkZWZpbmVkLiAqLwogLyogI3VuZGVmIE5FRURfVEhSRUFEX1NBRkUgKi8KIAorLyogRGVmaW5lIHRvIDEgaWYgdGhlIG9wZW4gZnVuY3Rpb24gcmVxdWlyZXMgdGhyZWUgYXJndW1lbnRzLiAqLworI2RlZmluZSBPUEVOX05FRURTX0FSRzMgMQorCiAvKiBjcHUtbWFjaGluZS1PUyAqLwotI2RlZmluZSBPUyAiYXJtLXVua25vd24tZWFiaSIKKyNkZWZpbmUgT1MgInVua25vd24tdW5rbm93bi12eHdvcmtzIgogCiAvKiBOYW1lIG9mIHBhY2thZ2UgKi8KICNkZWZpbmUgUEFDS0FHRSAiY3VybCIKIAotLyogRGVmaW5lIHRvIHRoZSBhZGRyZXNzIHdoZXJlIGJ1ZyByZXBvcnRzIGZvciB0aGlzIHBhY2thZ2Ugc2hvdWxkIGJlIHNlbnQuICovCi0jZGVmaW5lIFBBQ0tBR0VfQlVHUkVQT1JUICJhIHN1aXRhYmxlIGN1cmwgbWFpbGluZyBsaXN0ID0+IGh0dHA6Ly9jdXJsLmhheHguc2UvbWFpbC8iCi0KLS8qIERlZmluZSB0byB0aGUgZnVsbCBuYW1lIG9mIHRoaXMgcGFja2FnZS4gKi8KLSNkZWZpbmUgUEFDS0FHRV9OQU1FICJjdXJsIgotCi0vKiBEZWZpbmUgdG8gdGhlIGZ1bGwgbmFtZSBhbmQgdmVyc2lvbiBvZiB0aGlzIHBhY2thZ2UuICovCi0jZGVmaW5lIFBBQ0tBR0VfU1RSSU5HICJjdXJsIC0iCi0KLS8qIERlZmluZSB0byB0aGUgb25lIHN5bWJvbCBzaG9ydCBuYW1lIG9mIHRoaXMgcGFja2FnZS4gKi8KLSNkZWZpbmUgUEFDS0FHRV9UQVJOQU1FICJjdXJsIgotCi0vKiBEZWZpbmUgdG8gdGhlIGhvbWUgcGFnZSBmb3IgdGhpcyBwYWNrYWdlLiAqLwotI2RlZmluZSBQQUNLQUdFX1VSTCAiIgotCi0vKiBEZWZpbmUgdG8gdGhlIHZlcnNpb24gb2YgdGhpcyBwYWNrYWdlLiAqLwotI2RlZmluZSBQQUNLQUdFX1ZFUlNJT04gIi0iCi0KIC8qIGEgc3VpdGFibGUgZmlsZSB0byByZWFkIHJhbmRvbSBkYXRhIGZyb20gKi8KICNkZWZpbmUgUkFORE9NX0ZJTEUgIi9kZXYvdXJhbmRvbSIKIApAQCAtODMzLDcgKzc4Miw3IEBACiAvKiAjdW5kZWYgUkVDVkZST01fVFlQRV9BUkc2X0lTX1ZPSUQgKi8KIAogLyogRGVmaW5lIHRvIHRoZSBmdW5jdGlvbiByZXR1cm4gdHlwZSBmb3IgcmVjdmZyb20uICovCi0jZGVmaW5lIFJFQ1ZGUk9NX1RZUEVfUkVUViBzc2l6ZV90CisjZGVmaW5lIFJFQ1ZGUk9NX1RZUEVfUkVUViBpbnQKIAogLyogRGVmaW5lIHRvIHRoZSB0eXBlIG9mIGFyZyAxIGZvciByZWN2LiAqLwogI2RlZmluZSBSRUNWX1RZUEVfQVJHMSBpbnQKQEAgLTg0OCwxMyArNzk3LDEzIEBACiAjZGVmaW5lIFJFQ1ZfVFlQRV9BUkc0IGludAogCiAvKiBEZWZpbmUgdG8gdGhlIGZ1bmN0aW9uIHJldHVybiB0eXBlIGZvciByZWN2LiAqLwotI2RlZmluZSBSRUNWX1RZUEVfUkVUViBzc2l6ZV90CisjZGVmaW5lIFJFQ1ZfVFlQRV9SRVRWIGludAogCiAvKiBEZWZpbmUgYXMgdGhlIHJldHVybiB0eXBlIG9mIHNpZ25hbCBoYW5kbGVycyAoYGludCcgb3IgYHZvaWQnKS4gKi8KICNkZWZpbmUgUkVUU0lHVFlQRSB2b2lkCiAKIC8qIERlZmluZSB0byB0aGUgdHlwZSBxdWFsaWZpZXIgb2YgYXJnIDUgZm9yIHNlbGVjdC4gKi8KLSNkZWZpbmUgU0VMRUNUX1FVQUxfQVJHNSAKKyNkZWZpbmUgU0VMRUNUX1FVQUxfQVJHNQogCiAvKiBEZWZpbmUgdG8gdGhlIHR5cGUgb2YgYXJnIDEgZm9yIHNlbGVjdC4gKi8KICNkZWZpbmUgU0VMRUNUX1RZUEVfQVJHMSBpbnQKQEAgLTg4NCwxMyArODMzLDEzIEBACiAjZGVmaW5lIFNFTkRfVFlQRV9BUkc0IGludAogCiAvKiBEZWZpbmUgdG8gdGhlIGZ1bmN0aW9uIHJldHVybiB0eXBlIGZvciBzZW5kLiAqLwotI2RlZmluZSBTRU5EX1RZUEVfUkVUViBzc2l6ZV90CisjZGVmaW5lIFNFTkRfVFlQRV9SRVRWIGludAogCiAvKiBUaGUgc2l6ZSBvZiBgaW50JywgYXMgY29tcHV0ZWQgYnkgc2l6ZW9mLiAqLwogI2RlZmluZSBTSVpFT0ZfSU5UIDQKIAogLyogVGhlIHNpemUgb2YgYGxvbmcnLCBhcyBjb21wdXRlZCBieSBzaXplb2YuICovCi0jZGVmaW5lIFNJWkVPRl9MT05HIDgKKyNkZWZpbmUgU0laRU9GX0xPTkcgNAogCiAvKiBUaGUgc2l6ZSBvZiBgb2ZmX3QnLCBhcyBjb21wdXRlZCBieSBzaXplb2YuICovCiAjZGVmaW5lIFNJWkVPRl9PRkZfVCA4CkBAIC04OTksMjQgKzg0OCwyNCBAQAogI2RlZmluZSBTSVpFT0ZfU0hPUlQgMgogCiAvKiBUaGUgc2l6ZSBvZiBgc2l6ZV90JywgYXMgY29tcHV0ZWQgYnkgc2l6ZW9mLiAqLwotI2RlZmluZSBTSVpFT0ZfU0laRV9UIDgKKyNkZWZpbmUgU0laRU9GX1NJWkVfVCA0CiAKIC8qIFRoZSBzaXplIG9mIGB0aW1lX3QnLCBhcyBjb21wdXRlZCBieSBzaXplb2YuICovCi0jZGVmaW5lIFNJWkVPRl9USU1FX1QgOAorI2RlZmluZSBTSVpFT0ZfVElNRV9UIDQKIAogLyogVGhlIHNpemUgb2YgYHZvaWQqJywgYXMgY29tcHV0ZWQgYnkgc2l6ZW9mLiAqLwotI2RlZmluZSBTSVpFT0ZfVk9JRFAgOAorI2RlZmluZSBTSVpFT0ZfVk9JRFAgNAogCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgQU5TSSBDIGhlYWRlciBmaWxlcy4gKi8KICNkZWZpbmUgU1REQ19IRUFERVJTIDEKIAogLyogRGVmaW5lIHRvIHRoZSB0eXBlIG9mIGFyZyAzIGZvciBzdHJlcnJvcl9yLiAqLwotI2RlZmluZSBTVFJFUlJPUl9SX1RZUEVfQVJHMyBzaXplX3QKKy8qICN1bmRlZiBTVFJFUlJPUl9SX1RZUEVfQVJHMyAqLwogCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgY2FuIHNhZmVseSBpbmNsdWRlIGJvdGggPHN5cy90aW1lLmg+IGFuZCA8dGltZS5oPi4gKi8KLSNkZWZpbmUgVElNRV9XSVRIX1NZU19USU1FIDEKKy8qICN1bmRlZiBUSU1FX1dJVEhfU1lTX1RJTUUgKi8KIAotLyogRGVmaW5lIHRvIGVuYWJsZSBjLWFyZXMgc3VwcG9ydCAqLworLyogRGVmaW5lIGlmIHlvdSB3YW50IHRvIGVuYWJsZSBjLWFyZXMgc3VwcG9ydCAqLwogLyogI3VuZGVmIFVTRV9BUkVTICovCiAKIC8qIERlZmluZSB0byBkaXNhYmxlIG5vbi1ibG9ja2luZyBzb2NrZXRzLiAqLwpAQCAtOTUwLDkgKzg5OSw2IEBACiAvKiBEZWZpbmUgdG8gMSBpZiB1c2luZyB5YVNTTCBpbiBPcGVuU1NMIGNvbXBhdGliaWxpdHkgbW9kZS4gKi8KIC8qICN1bmRlZiBVU0VfWUFTU0xFTVVMICovCiAKLS8qIFZlcnNpb24gbnVtYmVyIG9mIHBhY2thZ2UgKi8KLSNkZWZpbmUgVkVSU0lPTiAiNy4yMC4xIgotCiAvKiBEZWZpbmUgdG8gYXZvaWQgYXV0b21hdGljIGluY2x1c2lvbiBvZiB3aW5zb2NrLmggKi8KIC8qICN1bmRlZiBXSU4zMl9MRUFOX0FORF9NRUFOICovCiAKQEAgLTk4NCwzICs5MzAsNSBAQAogCiAvKiB0aGUgc2lnbmVkIHZlcnNpb24gb2Ygc2l6ZV90ICovCiAvKiAjdW5kZWYgc3NpemVfdCAqLworCisjZW5kaWYgLyogX19MSUJfQ09ORklHX1ZYV09SS1NfSCAqLwpkaWZmIC0tZ2l0IGEvbGliL2NvbmZpZy13aW4zMi5oIGIvbGliL2NvbmZpZy13aW4zMi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlZTc2MDYKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY29uZmlnLXdpbjMyLmgKQEAgLTAsMCArMSw1ODcgQEAKKyNpZm5kZWYgX19MSUJfQ09ORklHX1dJTjMyX0gKKyNkZWZpbmUgX19MSUJfQ09ORklHX1dJTjMyX0gKKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworLyogICAgbGliL2NvbmZpZy13aW4zMi5oIC0gSGFuZCBjcmFmdGVkIGNvbmZpZyBmaWxlIGZvciBXaW5kb3dzICAgICAqLworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgSEVBREVSIEZJTEVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPGFycGEvaW5ldC5oPiBoZWFkZXIgZmlsZS4gICovCisvKiAjZGVmaW5lIEhBVkVfQVJQQV9JTkVUX0ggMSAqLworCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDxhc3NlcnQuaD4gaGVhZGVyIGZpbGUuICAqLworI2RlZmluZSBIQVZFX0FTU0VSVF9IIDEKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8Y3J5cHRvLmg+IGhlYWRlciBmaWxlLiAgKi8KKy8qICNkZWZpbmUgSEFWRV9DUllQVE9fSCAxICovCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPGVyci5oPiBoZWFkZXIgZmlsZS4gICovCisvKiAjZGVmaW5lIEhBVkVfRVJSX0ggMSAqLworCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDxmY250bC5oPiBoZWFkZXIgZmlsZS4gICovCisjZGVmaW5lIEhBVkVfRkNOVExfSCAxCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPGdldG9wdC5oPiBoZWFkZXIgZmlsZS4gICovCisvKiAjZGVmaW5lIEhBVkVfR0VUT1BUX0ggMSAqLworCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDxpby5oPiBoZWFkZXIgZmlsZS4gICovCisjZGVmaW5lIEhBVkVfSU9fSCAxCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPGxpbWl0cy5oPiBoZWFkZXIgZmlsZS4gICovCisjZGVmaW5lIEhBVkVfTElNSVRTX0ggMQorCisvKiBEZWZpbmUgaWYgeW91IG5lZWQgdGhlIG1hbGxvYy5oIGhlYWRlciBmaWxlIGV2ZW4gd2l0aCBzdGRsaWIuaCAgKi8KKyNpZiAhZGVmaW5lZChfX1NBTEZPUkRDX18pICYmICFkZWZpbmVkKF9fUE9DQ19fKQorI2RlZmluZSBORUVEX01BTExPQ19IIDEKKyNlbmRpZgorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDxuZXRkYi5oPiBoZWFkZXIgZmlsZS4gICovCisvKiAjZGVmaW5lIEhBVkVfTkVUREJfSCAxICovCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPG5ldGluZXQvaW4uaD4gaGVhZGVyIGZpbGUuICAqLworLyogI2RlZmluZSBIQVZFX05FVElORVRfSU5fSCAxICovCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPHByb2Nlc3MuaD4gaGVhZGVyIGZpbGUuICAqLworI2lmbmRlZiBfX1NBTEZPUkRDX18KKyNkZWZpbmUgSEFWRV9QUk9DRVNTX0ggMQorI2VuZGlmCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPHNpZ25hbC5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9TSUdOQUxfSCAxCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPHNndHR5Lmg+IGhlYWRlciBmaWxlLiAgKi8KKy8qICNkZWZpbmUgSEFWRV9TR1RUWV9IIDEgKi8KKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8c3NsLmg+IGhlYWRlciBmaWxlLiAgKi8KKy8qICNkZWZpbmUgSEFWRV9TU0xfSCAxICovCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPHN0ZGxpYi5oPiBoZWFkZXIgZmlsZS4gICovCisjZGVmaW5lIEhBVkVfU1RETElCX0ggMQorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDxzeXMvcGFyYW0uaD4gaGVhZGVyIGZpbGUuICAqLworLyogI2RlZmluZSBIQVZFX1NZU19QQVJBTV9IIDEgKi8KKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3NlbGVjdC5oPiBoZWFkZXIgZmlsZS4gICovCisvKiAjZGVmaW5lIEhBVkVfU1lTX1NFTEVDVF9IIDEgKi8KKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3NvY2tldC5oPiBoZWFkZXIgZmlsZS4gICovCisvKiAjZGVmaW5lIEhBVkVfU1lTX1NPQ0tFVF9IIDEgKi8KKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3NvY2tpby5oPiBoZWFkZXIgZmlsZS4gICovCisvKiAjZGVmaW5lIEhBVkVfU1lTX1NPQ0tJT19IIDEgKi8KKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3N0YXQuaD4gaGVhZGVyIGZpbGUuICAqLworI2RlZmluZSBIQVZFX1NZU19TVEFUX0ggMQorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDxzeXMvdGltZS5oPiBoZWFkZXIgZmlsZSAqLworLyogI2RlZmluZSBIQVZFX1NZU19USU1FX0ggMSAqLworCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDxzeXMvdHlwZXMuaD4gaGVhZGVyIGZpbGUuICAqLworI2RlZmluZSBIQVZFX1NZU19UWVBFU19IIDEKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3V0aW1lLmg+IGhlYWRlciBmaWxlLiAgKi8KKyNpZm5kZWYgX19CT1JMQU5EQ19fCisjZGVmaW5lIEhBVkVfU1lTX1VUSU1FX0ggMQorI2VuZGlmCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPHRlcm1pby5oPiBoZWFkZXIgZmlsZS4gICovCisvKiAjZGVmaW5lIEhBVkVfVEVSTUlPX0ggMSAqLworCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDx0ZXJtaW9zLmg+IGhlYWRlciBmaWxlLiAgKi8KKy8qICNkZWZpbmUgSEFWRV9URVJNSU9TX0ggMSAqLworCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDx0aW1lLmg+IGhlYWRlciBmaWxlLiAgKi8KKyNkZWZpbmUgSEFWRV9USU1FX0ggMQorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDx1bmlzdGQuaD4gaGVhZGVyIGZpbGUuICAqLworI2lmIGRlZmluZWQoX19NSU5HVzMyX18pIHx8IGRlZmluZWQoX19XQVRDT01DX18pIHx8IGRlZmluZWQoX19MQ0NfXykgfHwgXAorICAgIGRlZmluZWQoX19QT0NDX18pCisjZGVmaW5lIEhBVkVfVU5JU1REX0ggMQorI2VuZGlmCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPHdpbmRvd3MuaD4gaGVhZGVyIGZpbGUuICAqLworI2RlZmluZSBIQVZFX1dJTkRPV1NfSCAxCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPHdpbnNvY2suaD4gaGVhZGVyIGZpbGUuICAqLworI2RlZmluZSBIQVZFX1dJTlNPQ0tfSCAxCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPHdpbnNvY2syLmg+IGhlYWRlciBmaWxlLiAgKi8KKyNpZm5kZWYgX19TQUxGT1JEQ19fCisjZGVmaW5lIEhBVkVfV0lOU09DSzJfSCAxCisjZW5kaWYKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8d3MydGNwaXAuaD4gaGVhZGVyIGZpbGUuICAqLworI2lmbmRlZiBfX1NBTEZPUkRDX18KKyNkZWZpbmUgSEFWRV9XUzJUQ1BJUF9IIDEKKyNlbmRpZgorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgIE9USEVSIEhFQURFUiBJTkZPICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIERlZmluZSBpZiBzaWdfYXRvbWljX3QgaXMgYW4gYXZhaWxhYmxlIHR5cGVkZWYuICovCisjZGVmaW5lIEhBVkVfU0lHX0FUT01JQ19UIDEKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBBTlNJIEMgaGVhZGVyIGZpbGVzLiAgKi8KKyNkZWZpbmUgU1REQ19IRUFERVJTIDEKKworLyogRGVmaW5lIGlmIHlvdSBjYW4gc2FmZWx5IGluY2x1ZGUgYm90aCA8c3lzL3RpbWUuaD4gYW5kIDx0aW1lLmg+LiAgKi8KKy8qICNkZWZpbmUgVElNRV9XSVRIX1NZU19USU1FIDEgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZVTkNUSU9OUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGNsb3Nlc29ja2V0IGZ1bmN0aW9uLiAgKi8KKyNkZWZpbmUgSEFWRV9DTE9TRVNPQ0tFVCAxCisKKy8qIERlZmluZSBpZiB5b3UgZG9uJ3QgaGF2ZSB2cHJpbnRmIGJ1dCBkbyBoYXZlIF9kb3BybnQuICAqLworLyogI2RlZmluZSBIQVZFX0RPUFJOVCAxICovCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgZ2V0aG9zdGJ5YWRkciBmdW5jdGlvbi4gICovCisjZGVmaW5lIEhBVkVfR0VUSE9TVEJZQUREUiAxCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgZ2V0aG9zdG5hbWUgZnVuY3Rpb24uICAqLworI2RlZmluZSBIQVZFX0dFVEhPU1ROQU1FIDEKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBnZXRwYXNzIGZ1bmN0aW9uLiAgKi8KKy8qICNkZWZpbmUgSEFWRV9HRVRQQVNTIDEgKi8KKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBnZXRzZXJ2YnluYW1lIGZ1bmN0aW9uLiAgKi8KKyNkZWZpbmUgSEFWRV9HRVRTRVJWQllOQU1FIDEKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBnZXRwcm90b2J5bmFtZSBmdW5jdGlvbi4gICovCisjZGVmaW5lIEhBVkVfR0VUUFJPVE9CWU5BTUUKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBnZXR0aW1lb2ZkYXkgZnVuY3Rpb24uICAqLworLyogI2RlZmluZSBIQVZFX0dFVFRJTUVPRkRBWSAxICovCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgaW5ldF9hZGRyIGZ1bmN0aW9uLiAgKi8KKyNkZWZpbmUgSEFWRV9JTkVUX0FERFIgMQorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGlvY3Rsc29ja2V0IGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX0lPQ1RMU09DS0VUIDEKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIGEgd29ya2luZyBpb2N0bHNvY2tldCBGSU9OQklPIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX0lPQ1RMU09DS0VUX0ZJT05CSU8gMQorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIHBlcnJvciBmdW5jdGlvbi4gICovCisjZGVmaW5lIEhBVkVfUEVSUk9SIDEKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBSQU5EX3NjcmVlbiBmdW5jdGlvbiB3aGVuIHVzaW5nIFNTTCAgKi8KKyNkZWZpbmUgSEFWRV9SQU5EX1NDUkVFTiAxCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgYFJBTkRfc3RhdHVzJyBmdW5jdGlvbiB3aGVuIHVzaW5nIFNTTC4gKi8KKyNkZWZpbmUgSEFWRV9SQU5EX1NUQVRVUyAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgQ1JZUFRPX2NsZWFudXBfYWxsX2V4X2RhdGEnIGZ1bmN0aW9uLgorICAgVGhpcyBpcyBwcmVzZW50IGluIE9wZW5TU0wgdmVyc2lvbnMgYWZ0ZXIgMC45LjZiICovCisjZGVmaW5lIEhBVkVfQ1JZUFRPX0NMRUFOVVBfQUxMX0VYX0RBVEEgMQorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIHNlbGVjdCBmdW5jdGlvbi4gICovCisjZGVmaW5lIEhBVkVfU0VMRUNUIDEKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBzZXR2YnVmIGZ1bmN0aW9uLiAgKi8KKyNkZWZpbmUgSEFWRV9TRVRWQlVGIDEKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBzb2NrZXQgZnVuY3Rpb24uICAqLworI2RlZmluZSBIQVZFX1NPQ0tFVCAxCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgc3RyY2FzZWNtcCBmdW5jdGlvbi4gICovCisvKiAjZGVmaW5lIEhBVkVfU1RSQ0FTRUNNUCAxICovCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgc3RyZHVwIGZ1bmN0aW9uLiAgKi8KKyNkZWZpbmUgSEFWRV9TVFJEVVAgMQorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIHN0cmZ0aW1lIGZ1bmN0aW9uLiAgKi8KKyNkZWZpbmUgSEFWRV9TVFJGVElNRSAxCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgc3RyaWNtcCBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9TVFJJQ01QIDEKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBzdHJuY2FzZWNtcCBmdW5jdGlvbi4gKi8KKy8qICNkZWZpbmUgSEFWRV9TVFJOQ0FTRUNNUCAxICovCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgc3RybmljbXAgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfU1RSTklDTVAgMQorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIHN0cnN0ciBmdW5jdGlvbi4gICovCisjZGVmaW5lIEhBVkVfU1RSU1RSIDEKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBzdHJ0b2xsIGZ1bmN0aW9uLiAgKi8KKyNpZiBkZWZpbmVkKF9fTUlOR1czMl9fKSB8fCBkZWZpbmVkKF9fV0FUQ09NQ19fKSB8fCBkZWZpbmVkKF9fUE9DQ19fKQorI2RlZmluZSBIQVZFX1NUUlRPTEwgMQorI2VuZGlmCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgdGNnZXRhdHRyIGZ1bmN0aW9uLiAgKi8KKy8qICNkZWZpbmUgSEFWRV9UQ0dFVEFUVFIgMSAqLworCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIHRjc2V0YXR0ciBmdW5jdGlvbi4gICovCisvKiAjZGVmaW5lIEhBVkVfVENTRVRBVFRSIDEgKi8KKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSB1dGltZSBmdW5jdGlvbiAqLworI2lmbmRlZiBfX0JPUkxBTkRDX18KKyNkZWZpbmUgSEFWRV9VVElNRSAxCisjZW5kaWYKKworLyogRGVmaW5lIHRvIHRoZSB0eXBlIHF1YWxpZmllciBvZiBhcmcgMSBmb3IgZ2V0bmFtZWluZm8uICovCisjZGVmaW5lIEdFVE5BTUVJTkZPX1FVQUxfQVJHMSBjb25zdAorCisvKiBEZWZpbmUgdG8gdGhlIHR5cGUgb2YgYXJnIDEgZm9yIGdldG5hbWVpbmZvLiAqLworI2RlZmluZSBHRVROQU1FSU5GT19UWVBFX0FSRzEgc3RydWN0IHNvY2thZGRyICoKKworLyogRGVmaW5lIHRvIHRoZSB0eXBlIG9mIGFyZyAyIGZvciBnZXRuYW1laW5mby4gKi8KKyNkZWZpbmUgR0VUTkFNRUlORk9fVFlQRV9BUkcyIHNvY2tsZW5fdAorCisvKiBEZWZpbmUgdG8gdGhlIHR5cGUgb2YgYXJncyA0IGFuZCA2IGZvciBnZXRuYW1laW5mby4gKi8KKyNkZWZpbmUgR0VUTkFNRUlORk9fVFlQRV9BUkc0NiBEV09SRAorCisvKiBEZWZpbmUgdG8gdGhlIHR5cGUgb2YgYXJnIDcgZm9yIGdldG5hbWVpbmZvLiAqLworI2RlZmluZSBHRVROQU1FSU5GT19UWVBFX0FSRzcgaW50CisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgcmVjdiBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9SRUNWIDEKKworLyogRGVmaW5lIHRvIHRoZSB0eXBlIG9mIGFyZyAxIGZvciByZWN2LiAqLworI2RlZmluZSBSRUNWX1RZUEVfQVJHMSBTT0NLRVQKKworLyogRGVmaW5lIHRvIHRoZSB0eXBlIG9mIGFyZyAyIGZvciByZWN2LiAqLworI2RlZmluZSBSRUNWX1RZUEVfQVJHMiBjaGFyICoKKworLyogRGVmaW5lIHRvIHRoZSB0eXBlIG9mIGFyZyAzIGZvciByZWN2LiAqLworI2RlZmluZSBSRUNWX1RZUEVfQVJHMyBpbnQKKworLyogRGVmaW5lIHRvIHRoZSB0eXBlIG9mIGFyZyA0IGZvciByZWN2LiAqLworI2RlZmluZSBSRUNWX1RZUEVfQVJHNCBpbnQKKworLyogRGVmaW5lIHRvIHRoZSBmdW5jdGlvbiByZXR1cm4gdHlwZSBmb3IgcmVjdi4gKi8KKyNkZWZpbmUgUkVDVl9UWVBFX1JFVFYgaW50CisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgcmVjdmZyb20gZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfUkVDVkZST00gMQorCisvKiBEZWZpbmUgdG8gdGhlIHR5cGUgb2YgYXJnIDEgZm9yIHJlY3Zmcm9tLiAqLworI2RlZmluZSBSRUNWRlJPTV9UWVBFX0FSRzEgU09DS0VUCisKKy8qIERlZmluZSB0byB0aGUgdHlwZSBwb2ludGVkIGJ5IGFyZyAyIGZvciByZWN2ZnJvbS4gKi8KKyNkZWZpbmUgUkVDVkZST01fVFlQRV9BUkcyIGNoYXIKKworLyogRGVmaW5lIHRvIHRoZSB0eXBlIG9mIGFyZyAzIGZvciByZWN2ZnJvbS4gKi8KKyNkZWZpbmUgUkVDVkZST01fVFlQRV9BUkczIGludAorCisvKiBEZWZpbmUgdG8gdGhlIHR5cGUgb2YgYXJnIDQgZm9yIHJlY3Zmcm9tLiAqLworI2RlZmluZSBSRUNWRlJPTV9UWVBFX0FSRzQgaW50CisKKy8qIERlZmluZSB0byB0aGUgdHlwZSBwb2ludGVkIGJ5IGFyZyA1IGZvciByZWN2ZnJvbS4gKi8KKyNkZWZpbmUgUkVDVkZST01fVFlQRV9BUkc1IHN0cnVjdCBzb2NrYWRkcgorCisvKiBEZWZpbmUgdG8gdGhlIHR5cGUgcG9pbnRlZCBieSBhcmcgNiBmb3IgcmVjdmZyb20uICovCisjZGVmaW5lIFJFQ1ZGUk9NX1RZUEVfQVJHNiBpbnQKKworLyogRGVmaW5lIHRvIHRoZSBmdW5jdGlvbiByZXR1cm4gdHlwZSBmb3IgcmVjdmZyb20uICovCisjZGVmaW5lIFJFQ1ZGUk9NX1RZUEVfUkVUViBpbnQKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBzZW5kIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX1NFTkQgMQorCisvKiBEZWZpbmUgdG8gdGhlIHR5cGUgb2YgYXJnIDEgZm9yIHNlbmQuICovCisjZGVmaW5lIFNFTkRfVFlQRV9BUkcxIFNPQ0tFVAorCisvKiBEZWZpbmUgdG8gdGhlIHR5cGUgcXVhbGlmaWVyIG9mIGFyZyAyIGZvciBzZW5kLiAqLworI2RlZmluZSBTRU5EX1FVQUxfQVJHMiBjb25zdAorCisvKiBEZWZpbmUgdG8gdGhlIHR5cGUgb2YgYXJnIDIgZm9yIHNlbmQuICovCisjZGVmaW5lIFNFTkRfVFlQRV9BUkcyIGNoYXIgKgorCisvKiBEZWZpbmUgdG8gdGhlIHR5cGUgb2YgYXJnIDMgZm9yIHNlbmQuICovCisjZGVmaW5lIFNFTkRfVFlQRV9BUkczIGludAorCisvKiBEZWZpbmUgdG8gdGhlIHR5cGUgb2YgYXJnIDQgZm9yIHNlbmQuICovCisjZGVmaW5lIFNFTkRfVFlQRV9BUkc0IGludAorCisvKiBEZWZpbmUgdG8gdGhlIGZ1bmN0aW9uIHJldHVybiB0eXBlIGZvciBzZW5kLiAqLworI2RlZmluZSBTRU5EX1RZUEVfUkVUViBpbnQKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogICAgICAgICAgICAgICAgICAgICAgIFRZUEVERUYgUkVQTEFDRU1FTlRTICAgICAgICAgICAgICAgICAgICAgICAqLworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiBEZWZpbmUgdGhpcyBpZiBpbl9hZGRyX3QgaXMgbm90IGFuIGF2YWlsYWJsZSAndHlwZWRlZmVkJyB0eXBlICovCisjZGVmaW5lIGluX2FkZHJfdCB1bnNpZ25lZCBsb25nCisKKy8qIERlZmluZSBhcyB0aGUgcmV0dXJuIHR5cGUgb2Ygc2lnbmFsIGhhbmRsZXJzIChpbnQgb3Igdm9pZCkuICAqLworI2RlZmluZSBSRVRTSUdUWVBFIHZvaWQKKworLyogRGVmaW5lIHNzaXplX3QgaWYgaXQgaXMgbm90IGFuIGF2YWlsYWJsZSAndHlwZWRlZmVkJyB0eXBlICovCisjaWZuZGVmIF9TU0laRV9UX0RFRklORUQKKyMgIGlmIChkZWZpbmVkKF9fV0FUQ09NQ19fKSAmJiAoX19XQVRDT01DX18gPj0gMTI0MCkpIHx8IFwKKyAgICAgIGRlZmluZWQoX19QT0NDX18pIHx8IFwKKyAgICAgIGRlZmluZWQoX19NSU5HVzMyX18pCisjICBlbGlmIGRlZmluZWQoX1dJTjY0KQorIyAgICBkZWZpbmUgX1NTSVpFX1RfREVGSU5FRAorIyAgICBkZWZpbmUgc3NpemVfdCBfX2ludDY0CisjICBlbHNlCisjICAgIGRlZmluZSBfU1NJWkVfVF9ERUZJTkVECisjICAgIGRlZmluZSBzc2l6ZV90IGludAorIyAgZW5kaWYKKyNlbmRpZgorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBUWVBFIFNJWkVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIFRoZSBzaXplIG9mIGBpbnQnLCBhcyBjb21wdXRlZCBieSBzaXplb2YuICovCisjZGVmaW5lIFNJWkVPRl9JTlQgNAorCisvKiBUaGUgc2l6ZSBvZiBgbG9uZyBkb3VibGUnLCBhcyBjb21wdXRlZCBieSBzaXplb2YuICovCisjZGVmaW5lIFNJWkVPRl9MT05HX0RPVUJMRSAxNgorCisvKiBUaGUgc2l6ZSBvZiBgbG9uZyBsb25nJywgYXMgY29tcHV0ZWQgYnkgc2l6ZW9mLiAqLworLyogI2RlZmluZSBTSVpFT0ZfTE9OR19MT05HIDggKi8KKworLyogVGhlIHNpemUgb2YgYHNob3J0JywgYXMgY29tcHV0ZWQgYnkgc2l6ZW9mLiAqLworI2RlZmluZSBTSVpFT0ZfU0hPUlQgMgorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgU1RSVUNUIFJFTEFURUQgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIERlZmluZSB0aGlzIGlmIHlvdSBoYXZlIHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlICovCisjaWZuZGVmIF9fU0FMRk9SRENfXworI2RlZmluZSBIQVZFX1NUUlVDVF9TT0NLQUREUl9TVE9SQUdFIDEKKyNlbmRpZgorCisvKiBEZWZpbmUgdGhpcyBpZiB5b3UgaGF2ZSBzdHJ1Y3QgdGltZXZhbCAqLworI2RlZmluZSBIQVZFX1NUUlVDVF9USU1FVkFMIDEKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogICAgICAgICAgICAgICAgICAgICAgICBXYXR0LTMyIHRjcC9pcCBTUEVDSUZJQyAgICAgICAgICAgICAgICAgICAqLworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjaWZkZWYgVVNFX1dBVFQzMgorICAjaW5jbHVkZSA8dGNwLmg+CisgICN1bmRlZiBieXRlCisgICN1bmRlZiB3b3JkCisgICN1bmRlZiBVU0VfV0lOU09DSworICAjdW5kZWYgSEFWRV9XSU5TT0NLX0gKKyAgI3VuZGVmIEhBVkVfV0lOU09DSzJfSAorICAjdW5kZWYgSEFWRV9XUzJUQ1BJUF9ICisgICNkZWZpbmUgSEFWRV9HRVRBRERSSU5GTworICAjZGVmaW5lIEhBVkVfR0VUTkFNRUlORk8KKyAgI2RlZmluZSBIQVZFX1NZU19JT0NUTF9ICisgICNkZWZpbmUgSEFWRV9TWVNfU09DS0VUX0gKKyAgI2RlZmluZSBIQVZFX05FVElORVRfSU5fSAorICAjZGVmaW5lIEhBVkVfTkVUREJfSAorICAjZGVmaW5lIEhBVkVfQVJQQV9JTkVUX0gKKyAgI2RlZmluZSBIQVZFX0ZSRUVBRERSSU5GTworICAjZGVmaW5lIFNPQ0tFVCBpbnQKKyNlbmRpZgorCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgQ09NUElMRVIgU1BFQ0lGSUMgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyogVW5kZWYga2V5d29yZCAnY29uc3QnIGlmIGl0IGRvZXMgbm90IHdvcmsuICAqLworLyogI3VuZGVmIGNvbnN0ICovCisKKy8qIFdpbmRvd3Mgc2hvdWxkIG5vdCBoYXZlIEhBVkVfR01USU1FX1IgZGVmaW5lZCAqLworLyogI3VuZGVmIEhBVkVfR01USU1FX1IgKi8KKworLyogRGVmaW5lIGlmIHRoZSBjb21waWxlciBzdXBwb3J0cyBDOTkgdmFyaWFkaWMgbWFjcm8gc3R5bGUuICovCisjaWYgZGVmaW5lZChfTVNDX1ZFUikgJiYgKF9NU0NfVkVSID49IDE0MDApCisjZGVmaW5lIEhBVkVfVkFSSUFESUNfTUFDUk9TX0M5OSAxCisjZW5kaWYKKworLyogRGVmaW5lIGlmIHRoZSBjb21waWxlciBzdXBwb3J0cyB0aGUgJ2xvbmcgbG9uZycgZGF0YSB0eXBlLiAqLworI2lmIGRlZmluZWQoX19NSU5HVzMyX18pIHx8IGRlZmluZWQoX19XQVRDT01DX18pCisjZGVmaW5lIEhBVkVfTE9OR0xPTkcgMQorI2VuZGlmCisKKy8qIERlZmluZSB0byBhdm9pZCBWUzIwMDUgY29tcGxhaW5pbmcgYWJvdXQgcG9ydGFibGUgQyBmdW5jdGlvbnMgKi8KKyNpZiBkZWZpbmVkKF9NU0NfVkVSKSAmJiAoX01TQ19WRVIgPj0gMTQwMCkKKyNkZWZpbmUgX0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFIDEKKyNkZWZpbmUgX0NSVF9OT05TVERDX05PX0RFUFJFQ0FURSAxCisjZW5kaWYKKworLyogVlMyMDA1IGFuZCBsYXRlciBkYWZhdWx0IHNpemUgZm9yIHRpbWVfdCBpcyA2NC1iaXQsIHVubGVzcyAqLworLyogX1VTRV8zMkJJVF9USU1FX1QgaGFzIGJlZW4gZGVmaW5lZCB0byBnZXQgYSAzMi1iaXQgdGltZV90LiAqLworI2lmIGRlZmluZWQoX01TQ19WRVIpICYmIChfTVNDX1ZFUiA+PSAxNDAwKQorIyAgaWZuZGVmIF9VU0VfMzJCSVRfVElNRV9UCisjICAgIGRlZmluZSBTSVpFT0ZfVElNRV9UIDgKKyMgIGVsc2UKKyMgICAgZGVmaW5lIFNJWkVPRl9USU1FX1QgNAorIyAgZW5kaWYKKyNlbmRpZgorCisvKiBPZmZpY2lhbGx5LCBNaWNyb3NvZnQncyBXaW5kb3dzIFNESyB2ZXJzaW9ucyA2LlggZG8gbm90IHN1cHBvcnQgV2luZG93cworICAgMjAwMCBhcyBhIHN1cHBvcnRlZCBidWlsZCB0YXJnZXQuIFZTMjAwOCBkZWZhdWx0IGluc3RhbGxhdGlvbnMgcHJvdmlkZSBhbgorICAgZW1iZWRkZWQgV2luZG93cyBTREsgdjYuMEEgYWxvbmcgd2l0aCB0aGUgY2xhaW0gdGhhdCBXaW5kb3dzIDIwMDAgaXMgYQorICAgdmFsaWQgYnVpbGQgdGFyZ2V0IGZvciBWUzIwMDguIFBvcHVsYXIgYmVsaWVmIGlzIHRoYXQgYmluYXJpZXMgYnVpbHQgdXNpbmcKKyAgIFdpbmRvd3MgU0RLIHZlcnNpb25zIDYuWCBhbmQgV2luZG93cyAyMDAwIGFzIGEgYnVpbGQgdGFyZ2V0IGFyZSBmdW5jdGlvbmFsICovCisjaWYgZGVmaW5lZChfTVNDX1ZFUikgJiYgKF9NU0NfVkVSID49IDE1MDApCisjICBkZWZpbmUgVlMyMDA4X01JTklNVU1fVEFSR0VUIDB4MDUwMAorI2VuZGlmCisKKy8qIFdoZW4gbm8gYnVpbGQgdGFyZ2V0IGlzIHNwZWNpZmllZCBWUzIwMDggZGVmYXVsdCBidWlsZCB0YXJnZXQgaXMgV2luZG93cworICAgVmlzdGEsIHdoaWNoIGxlYXZlcyBvdXQgZXZlbiBXaW5zb3dzIFhQLiBJZiBubyBidWlsZCB0YXJnZXQgaGFzIGJlZW4gZ2l2ZW4KKyAgIGZvciBWUzIwMDggd2Ugd2lsbCB0YXJnZXQgdGhlIG1pbmltdW0gT2ZmaWNpYWxseSBzdXBwb3J0ZWQgYnVpbGQgdGFyZ2V0LAorICAgd2hpY2ggaGFwcGVucyB0byBiZSBXaW5kb3dzIFhQLiAqLworI2lmIGRlZmluZWQoX01TQ19WRVIpICYmIChfTVNDX1ZFUiA+PSAxNTAwKQorIyAgZGVmaW5lIFZTMjAwOF9ERUZBVUxUX1RBUkdFVCAgMHgwNTAxCisjZW5kaWYKKworLyogVlMyMDA4IGRlZmF1bHQgdGFyZ2V0IHNldHRpbmdzIGFuZCBtaW5pbXVtIGJ1aWxkIHRhcmdldCBjaGVjayAqLworI2lmIGRlZmluZWQoX01TQ19WRVIpICYmIChfTVNDX1ZFUiA+PSAxNTAwKQorIyAgaWZuZGVmIF9XSU4zMl9XSU5OVAorIyAgICBkZWZpbmUgX1dJTjMyX1dJTk5UIFZTMjAwOF9ERUZBVUxUX1RBUkdFVAorIyAgZW5kaWYKKyMgIGlmbmRlZiBXSU5WRVIKKyMgICAgZGVmaW5lIFdJTlZFUiBWUzIwMDhfREVGQVVMVF9UQVJHRVQKKyMgIGVuZGlmCisjICBpZiAoX1dJTjMyX1dJTk5UIDwgVlMyMDA4X01JTklNVU1fVEFSR0VUKSB8fCAoV0lOVkVSIDwgVlMyMDA4X01JTklNVU1fVEFSR0VUKQorIyAgICBlcnJvciBWUzIwMDggZG9lcyBub3Qgc3VwcG9ydCBXaW5kb3dzIGJ1aWxkIHRhcmdldHMgcHJpb3IgdG8gV2luZG93cyAyMDAwCisjICBlbmRpZgorI2VuZGlmCisKKy8qIFdoZW4gbm8gYnVpbGQgdGFyZ2V0IGlzIHNwZWNpZmllZCBQZWxsZXMgQyA1LjAwIGFuZCBsYXRlciBkZWZhdWx0IGJ1aWxkCisgICB0YXJnZXQgaXMgV2luZG93cyBWaXN0YS4gV2Ugb3ZlcnJpZGUgZGVmYXVsdCB0YXJnZXQgdG8gYmUgV2luZG93cyAyMDAwLiAqLworI2lmIGRlZmluZWQoX19QT0NDX18pICYmIChfX1BPQ0NfXyA+PSA1MDApCisjICBpZm5kZWYgX1dJTjMyX1dJTk5UCisjICAgIGRlZmluZSBfV0lOMzJfV0lOTlQgMHgwNTAwCisjICBlbmRpZgorIyAgaWZuZGVmIFdJTlZFUgorIyAgICBkZWZpbmUgV0lOVkVSIDB4MDUwMAorIyAgZW5kaWYKKyNlbmRpZgorCisvKiBBdmFpbGFiaWxpdHkgb2YgZnJlZWFkZHJpbmZvLCBnZXRhZGRyaW5mbyBhbmQgZ2V0bmFtZWluZm8gZnVuY3Rpb25zIGlzCisgICBxdWl0ZSBjb252b2x1dGVkLCBjb21waWxlciBkZXBlbmRlbnQgYW5kIGV2ZW4gYnVpbGQgdGFyZ2V0IGRlcGVuZGVudC4gKi8KKyNpZiBkZWZpbmVkKEhBVkVfV1MyVENQSVBfSCkKKyMgIGlmIGRlZmluZWQoX19QT0NDX18pCisjICAgIGRlZmluZSBIQVZFX0ZSRUVBRERSSU5GTyAgICAgICAgICAgMQorIyAgICBkZWZpbmUgSEFWRV9HRVRBRERSSU5GTyAgICAgICAgICAgIDEKKyMgICAgZGVmaW5lIEhBVkVfR0VUQUREUklORk9fVEhSRUFEU0FGRSAxCisjICAgIGRlZmluZSBIQVZFX0dFVE5BTUVJTkZPICAgICAgICAgICAgMQorIyAgZWxpZiBkZWZpbmVkKF9XSU4zMl9XSU5OVCkgJiYgKF9XSU4zMl9XSU5OVCA+PSAweDA1MDEpCisjICAgIGRlZmluZSBIQVZFX0ZSRUVBRERSSU5GTyAgICAgICAgICAgMQorIyAgICBkZWZpbmUgSEFWRV9HRVRBRERSSU5GTyAgICAgICAgICAgIDEKKyMgICAgZGVmaW5lIEhBVkVfR0VUQUREUklORk9fVEhSRUFEU0FGRSAxCisjICAgIGRlZmluZSBIQVZFX0dFVE5BTUVJTkZPICAgICAgICAgICAgMQorIyAgZWxpZiBkZWZpbmVkKF9NU0NfVkVSKSAmJiAoX01TQ19WRVIgPj0gMTIwMCkKKyMgICAgZGVmaW5lIEhBVkVfRlJFRUFERFJJTkZPICAgICAgICAgICAxCisjICAgIGRlZmluZSBIQVZFX0dFVEFERFJJTkZPICAgICAgICAgICAgMQorIyAgICBkZWZpbmUgSEFWRV9HRVRBRERSSU5GT19USFJFQURTQUZFIDEKKyMgICAgZGVmaW5lIEhBVkVfR0VUTkFNRUlORk8gICAgICAgICAgICAxCisjICBlbmRpZgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9fUE9DQ19fKQorIyAgaWZuZGVmIF9NU0NfVkVSCisjICAgIGVycm9yIE1pY3Jvc29mdCBleHRlbnNpb25zIC9aZSBjb21waWxlciBvcHRpb24gaXMgcmVxdWlyZWQKKyMgIGVuZGlmCisjICBpZm5kZWYgX19QT0NDX19PTEROQU1FUworIyAgICBlcnJvciBDb21wYXRpYmlsaXR5IG5hbWVzIC9HbyBjb21waWxlciBvcHRpb24gaXMgcmVxdWlyZWQKKyMgIGVuZGlmCisjZW5kaWYKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogICAgICAgICAgICAgICAgICAgICAgICBMQVJHRSBGSUxFIFNVUFBPUlQgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjaWYgZGVmaW5lZChfTVNDX1ZFUikgJiYgIWRlZmluZWQoX1dJTjMyX1dDRSkKKyMgIGlmIChfTVNDX1ZFUiA+PSA5MDApICYmIChfSU5URUdSQUxfTUFYX0JJVFMgPj0gNjQpCisjICAgIGRlZmluZSBVU0VfV0lOMzJfTEFSR0VfRklMRVMKKyMgIGVsc2UKKyMgICAgZGVmaW5lIFVTRV9XSU4zMl9TTUFMTF9GSUxFUworIyAgZW5kaWYKKyNlbmRpZgorCisjaWYgZGVmaW5lZChfX01JTkdXMzJfXykgJiYgIWRlZmluZWQoVVNFX1dJTjMyX0xBUkdFX0ZJTEVTKQorIyAgZGVmaW5lIFVTRV9XSU4zMl9MQVJHRV9GSUxFUworI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9fV0FUQ09NQ19fKSAmJiAhZGVmaW5lZChVU0VfV0lOMzJfTEFSR0VfRklMRVMpCisjICBkZWZpbmUgVVNFX1dJTjMyX0xBUkdFX0ZJTEVTCisjZW5kaWYKKworI2lmIGRlZmluZWQoX19QT0NDX18pCisjICB1bmRlZiBVU0VfV0lOMzJfTEFSR0VfRklMRVMKKyNlbmRpZgorCisjaWYgIWRlZmluZWQoVVNFX1dJTjMyX0xBUkdFX0ZJTEVTKSAmJiAhZGVmaW5lZChVU0VfV0lOMzJfU01BTExfRklMRVMpCisjICBkZWZpbmUgVVNFX1dJTjMyX1NNQUxMX0ZJTEVTCisjZW5kaWYKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogICAgICAgICAgICAgICAgICAgICAgIEROUyBSRVNPTFZFUiBTUEVDSUFMVFkgICAgICAgICAgICAgICAgICAgICAqLworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKgorICogVW5kZWZpbmUgYm90aCBVU0VfQVJFUyBhbmQgVVNFX1RIUkVBRFNfV0lOMzIgZm9yIHN5bmNocm9ub3VzIEROUworICovCisKKy8qIERlZmluZSBVU0VfQVJFUyB0byBlbmFibGUgYy1hcmVzIGFzeW5jaHJvbm91cyBETlMgbG9va3VwcyAqLworLyogI2RlZmluZSBVU0VfQVJFUyAxICovCisKKy8qIERlZmluZSBVU0VfVEhSRUFEU19XSU4zMiB0byBlbmFibGUgdGhyZWFkZWQgYXN5bmNocm9ub3VzIEROUyBsb29rdXBzICovCisjZGVmaW5lIFVTRV9USFJFQURTX1dJTjMyIDEKKworI2lmIGRlZmluZWQoVVNFX0FSRVMpICYmIGRlZmluZWQoVVNFX1RIUkVBRFNfV0lOMzIpCisjICBlcnJvciAiT25seSBvbmUgRE5TIGxvb2t1cCBzcGVjaWFsdHkgbWF5IGJlIGRlZmluZWQgYXQgbW9zdCIKKyNlbmRpZgorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIExEQVAgU1VQUE9SVCAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNpZiBkZWZpbmVkKENVUkxfSEFTX05PVkVMTF9MREFQU0RLKSB8fCBkZWZpbmVkKENVUkxfSEFTX01PWklMTEFfTERBUFNESykKKyN1bmRlZiBDVVJMX0xEQVBfV0lOCisjZGVmaW5lIEhBVkVfTERBUF9TU0xfSCAxCisjZGVmaW5lIEhBVkVfTERBUF9VUkxfUEFSU0UgMQorI2VsaWYgZGVmaW5lZChDVVJMX0hBU19PUEVOTERBUF9MREFQU0RLKQorI3VuZGVmIENVUkxfTERBUF9XSU4KKyNkZWZpbmUgSEFWRV9MREFQX1VSTF9QQVJTRSAxCisjZWxzZQorI3VuZGVmIEhBVkVfTERBUF9VUkxfUEFSU0UKKyNkZWZpbmUgQ1VSTF9MREFQX1dJTiAxCisjZW5kaWYKKworI2lmIGRlZmluZWQoX19XQVRDT01DX18pICYmIGRlZmluZWQoQ1VSTF9MREFQX1dJTikKKyNpZiBfX1dBVENPTUNfXyA8IDEyODAKKyNkZWZpbmUgV0lOQkVSQVBJICBfX2RlY2xzcGVjKGNkZWNsKQorI2RlZmluZSBXSU5MREFQQVBJIF9fZGVjbHNwZWMoY2RlY2wpCisjZW5kaWYKKyNlbmRpZgorCisjaWYgZGVmaW5lZChfX1BPQ0NfXykgJiYgZGVmaW5lZChDVVJMX0xEQVBfV0lOKQorIyAgZGVmaW5lIENVUkxfRElTQUJMRV9MREFQIDEKKyNlbmRpZgorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgQURESVRJT05BTCBERUZJTklUSU9OUyAgICAgICAgICAgICAgICAgICAgICovCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIERlZmluZSBjcHUtbWFjaGluZS1PUyAqLworI3VuZGVmIE9TCisjaWYgZGVmaW5lZChfTV9JWDg2KSB8fCBkZWZpbmVkKF9faTM4Nl9fKSAvKiB4ODYgKE1TVkMgb3IgZ2NjKSAqLworI2RlZmluZSBPUyAiaTM4Ni1wYy13aW4zMiIKKyNlbGlmIGRlZmluZWQoX01fSUE2NCkgLyogSXRhbml1bSAqLworI2RlZmluZSBPUyAiaWE2NC1wYy13aW4zMiIKKyNlbGlmIGRlZmluZWQoX01fWDY0KSAvKiBBTUQ2NC9FTTY0VCAtIE5vdCBkZWZpbmVkIHVudGlsIE1TVkMgMjAwNSAqLworI2RlZmluZSBPUyAiYW1kNjQtcGMtd2luMzIiCisjZWxzZQorI2RlZmluZSBPUyAidW5rbm93bi1wYy13aW4zMiIKKyNlbmRpZgorCisvKiBOYW1lIG9mIHBhY2thZ2UgKi8KKyNkZWZpbmUgUEFDS0FHRSAiY3VybCIKKworI2lmIGRlZmluZWQoX19QT0NDX18pIHx8IChVU0VfSVBWNikKKyMgIGRlZmluZSBFTkFCTEVfSVBWNiAxCisjZW5kaWYKKworI2VuZGlmIC8qIF9fTElCX0NPTkZJR19XSU4zMl9IICovCmRpZmYgLS1naXQgYS9saWIvY29uZmlnLXdpbjMyY2UuaCBiL2xpYi9jb25maWctd2luMzJjZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmNDE3ODIKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY29uZmlnLXdpbjMyY2UuaApAQCAtMCwwICsxLDQwOSBAQAorI2lmbmRlZiBfX0xJQl9DT05GSUdfV0lOMzJDRV9ICisjZGVmaW5lIF9fTElCX0NPTkZJR19XSU4zMkNFX0gKKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworLyogIGxpYi9jb25maWctd2luMzJjZS5oIC0gSGFuZCBjcmFmdGVkIGNvbmZpZyBmaWxlIGZvciB3aW5kb3dzIGNlICAqLworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgSEVBREVSIEZJTEVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPGFycGEvaW5ldC5oPiBoZWFkZXIgZmlsZS4gICovCisvKiAjZGVmaW5lIEhBVkVfQVJQQV9JTkVUX0ggMSAqLworCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDxhc3NlcnQuaD4gaGVhZGVyIGZpbGUuICAqLworLyogI2RlZmluZSBIQVZFX0FTU0VSVF9IIDEgKi8KKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8Y3J5cHRvLmg+IGhlYWRlciBmaWxlLiAgKi8KKy8qICNkZWZpbmUgSEFWRV9DUllQVE9fSCAxICovCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPGVyci5oPiBoZWFkZXIgZmlsZS4gICovCisvKiAjZGVmaW5lIEhBVkVfRVJSX0ggMSAqLworCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDxmY250bC5oPiBoZWFkZXIgZmlsZS4gICovCisjZGVmaW5lIEhBVkVfRkNOVExfSCAxCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPGdldG9wdC5oPiBoZWFkZXIgZmlsZS4gICovCisvKiAjZGVmaW5lIEhBVkVfR0VUT1BUX0ggMSAqLworCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDxpby5oPiBoZWFkZXIgZmlsZS4gICovCisjZGVmaW5lIEhBVkVfSU9fSCAxCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPGxpbWl0cy5oPiBoZWFkZXIgZmlsZS4gICovCisjZGVmaW5lIEhBVkVfTElNSVRTX0ggMQorCisvKiBEZWZpbmUgaWYgeW91IG5lZWQgdGhlIG1hbGxvYy5oIGhlYWRlciBoZWFkZXIgZmlsZSBldmVuIHdpdGggc3RkbGliLmggICovCisjZGVmaW5lIE5FRURfTUFMTE9DX0ggMQorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDxuZXRkYi5oPiBoZWFkZXIgZmlsZS4gICovCisvKiAjZGVmaW5lIEhBVkVfTkVUREJfSCAxICovCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPG5ldGluZXQvaW4uaD4gaGVhZGVyIGZpbGUuICAqLworLyogI2RlZmluZSBIQVZFX05FVElORVRfSU5fSCAxICovCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPHNpZ25hbC5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9TSUdOQUxfSCAxCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPHNndHR5Lmg+IGhlYWRlciBmaWxlLiAgKi8KKy8qICNkZWZpbmUgSEFWRV9TR1RUWV9IIDEgKi8KKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8c3NsLmg+IGhlYWRlciBmaWxlLiAgKi8KKy8qICNkZWZpbmUgSEFWRV9TU0xfSCAxICovCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPHN0ZGxpYi5oPiBoZWFkZXIgZmlsZS4gICovCisjZGVmaW5lIEhBVkVfU1RETElCX0ggMQorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDxwcm9jZXNzLmg+IGhlYWRlciBmaWxlLiAgKi8KKyNkZWZpbmUgSEFWRV9QUk9DRVNTX0ggMQorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDxzeXMvcGFyYW0uaD4gaGVhZGVyIGZpbGUuICAqLworLyogI2RlZmluZSBIQVZFX1NZU19QQVJBTV9IIDEgKi8KKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3NlbGVjdC5oPiBoZWFkZXIgZmlsZS4gICovCisvKiAjZGVmaW5lIEhBVkVfU1lTX1NFTEVDVF9IIDEgKi8KKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3NvY2tldC5oPiBoZWFkZXIgZmlsZS4gICovCisvKiAjZGVmaW5lIEhBVkVfU1lTX1NPQ0tFVF9IIDEgKi8KKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3NvY2tpby5oPiBoZWFkZXIgZmlsZS4gICovCisvKiAjZGVmaW5lIEhBVkVfU1lTX1NPQ0tJT19IIDEgKi8KKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3N0YXQuaD4gaGVhZGVyIGZpbGUuICAqLworI2RlZmluZSBIQVZFX1NZU19TVEFUX0ggMQorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDxzeXMvdGltZS5oPiBoZWFkZXIgZmlsZSAqLworLyogI2RlZmluZSBIQVZFX1NZU19USU1FX0ggMSAqLworCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDxzeXMvdHlwZXMuaD4gaGVhZGVyIGZpbGUuICAqLworLyogI2RlZmluZSBIQVZFX1NZU19UWVBFU19IIDEgKi8KKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3V0aW1lLmg+IGhlYWRlciBmaWxlICovCisjZGVmaW5lIEhBVkVfU1lTX1VUSU1FX0ggMQorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDx0ZXJtaW8uaD4gaGVhZGVyIGZpbGUuICAqLworLyogI2RlZmluZSBIQVZFX1RFUk1JT19IIDEgKi8KKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8dGVybWlvcy5oPiBoZWFkZXIgZmlsZS4gICovCisvKiAjZGVmaW5lIEhBVkVfVEVSTUlPU19IIDEgKi8KKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8dGltZS5oPiBoZWFkZXIgZmlsZS4gICovCisjZGVmaW5lIEhBVkVfVElNRV9IIDEKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8dW5pc3RkLmg+IGhlYWRlciBmaWxlLiAgKi8KKyNpZiBkZWZpbmVkKF9fTUlOR1czMl9fKSB8fCBkZWZpbmVkKF9fV0FUQ09NQ19fKSB8fCBkZWZpbmVkKF9fTENDX18pCisjZGVmaW5lIEhBVkVfVU5JU1REX0ggMQorI2VuZGlmCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPHdpbmRvd3MuaD4gaGVhZGVyIGZpbGUuICAqLworI2RlZmluZSBIQVZFX1dJTkRPV1NfSCAxCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPHdpbnNvY2suaD4gaGVhZGVyIGZpbGUuICAqLworI2RlZmluZSBIQVZFX1dJTlNPQ0tfSCAxCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPHdpbnNvY2syLmg+IGhlYWRlciBmaWxlLiAgKi8KKy8qICNkZWZpbmUgSEFWRV9XSU5TT0NLMl9IIDEgKi8KKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8d3MydGNwaXAuaD4gaGVhZGVyIGZpbGUuICAqLworLyogI2RlZmluZSBIQVZFX1dTMlRDUElQX0ggMSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgIE9USEVSIEhFQURFUiBJTkZPICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIERlZmluZSBpZiBzaWdfYXRvbWljX3QgaXMgYW4gYXZhaWxhYmxlIHR5cGVkZWYuICovCisjZGVmaW5lIEhBVkVfU0lHX0FUT01JQ19UIDEKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBBTlNJIEMgaGVhZGVyIGZpbGVzLiAgKi8KKyNkZWZpbmUgU1REQ19IRUFERVJTIDEKKworLyogRGVmaW5lIGlmIHlvdSBjYW4gc2FmZWx5IGluY2x1ZGUgYm90aCA8c3lzL3RpbWUuaD4gYW5kIDx0aW1lLmg+LiAgKi8KKy8qICNkZWZpbmUgVElNRV9XSVRIX1NZU19USU1FIDEgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZVTkNUSU9OUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGNsb3Nlc29ja2V0IGZ1bmN0aW9uLiAgKi8KKyNkZWZpbmUgSEFWRV9DTE9TRVNPQ0tFVCAxCisKKy8qIERlZmluZSBpZiB5b3UgZG9uJ3QgaGF2ZSB2cHJpbnRmIGJ1dCBkbyBoYXZlIF9kb3BybnQuICAqLworLyogI2RlZmluZSBIQVZFX0RPUFJOVCAxICovCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgZ2V0aG9zdGJ5YWRkciBmdW5jdGlvbi4gICovCisjZGVmaW5lIEhBVkVfR0VUSE9TVEJZQUREUiAxCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgZ2V0aG9zdG5hbWUgZnVuY3Rpb24uICAqLworI2RlZmluZSBIQVZFX0dFVEhPU1ROQU1FIDEKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBnZXRwYXNzIGZ1bmN0aW9uLiAgKi8KKy8qICNkZWZpbmUgSEFWRV9HRVRQQVNTIDEgKi8KKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBnZXRzZXJ2YnluYW1lIGZ1bmN0aW9uLiAgKi8KKyNkZWZpbmUgSEFWRV9HRVRTRVJWQllOQU1FIDEKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBnZXR0aW1lb2ZkYXkgZnVuY3Rpb24uICAqLworLyogICNkZWZpbmUgSEFWRV9HRVRUSU1FT0ZEQVkgMSAqLworCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGluZXRfYWRkciBmdW5jdGlvbi4gICovCisjZGVmaW5lIEhBVkVfSU5FVF9BRERSIDEKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBpb2N0bHNvY2tldCBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9JT0NUTFNPQ0tFVCAxCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSBhIHdvcmtpbmcgaW9jdGxzb2NrZXQgRklPTkJJTyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9JT0NUTFNPQ0tFVF9GSU9OQklPIDEKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBwZXJyb3IgZnVuY3Rpb24uICAqLworI2RlZmluZSBIQVZFX1BFUlJPUiAxCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgUkFORF9zY3JlZW4gZnVuY3Rpb24gd2hlbiB1c2luZyBTU0wgICovCisjZGVmaW5lIEhBVkVfUkFORF9TQ1JFRU4gMQorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGBSQU5EX3N0YXR1cycgZnVuY3Rpb24gd2hlbiB1c2luZyBTU0wuICovCisjZGVmaW5lIEhBVkVfUkFORF9TVEFUVVMgMQorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIHNlbGVjdCBmdW5jdGlvbi4gICovCisjZGVmaW5lIEhBVkVfU0VMRUNUIDEKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBzZXR2YnVmIGZ1bmN0aW9uLiAgKi8KKyNkZWZpbmUgSEFWRV9TRVRWQlVGIDEKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBzb2NrZXQgZnVuY3Rpb24uICAqLworI2RlZmluZSBIQVZFX1NPQ0tFVCAxCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgc3RyY2FzZWNtcCBmdW5jdGlvbi4gICovCisvKiAjZGVmaW5lIEhBVkVfU1RSQ0FTRUNNUCAxICovCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgc3RyZHVwIGZ1bmN0aW9uLiAgKi8KKy8qICNkZWZpbmUgSEFWRV9TVFJEVVAgMSAqLworCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIHN0cmZ0aW1lIGZ1bmN0aW9uLiAgKi8KKy8qICNkZWZpbmUgSEFWRV9TVFJGVElNRSAxICovCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgc3RyaWNtcCBmdW5jdGlvbi4gKi8KKy8qICNkZWZpbmUgSEFWRV9TVFJJQ01QIDEgKi8KKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBzdHJuY2FzZWNtcCBmdW5jdGlvbi4gKi8KKy8qICNkZWZpbmUgSEFWRV9TVFJOQ0FTRUNNUCAxICovCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgc3RybmljbXAgZnVuY3Rpb24uICovCisvKiAjZGVmaW5lIEhBVkVfU1RSTklDTVAgMSAqLworCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIHN0cnN0ciBmdW5jdGlvbi4gICovCisjZGVmaW5lIEhBVkVfU1RSU1RSIDEKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBzdHJ0b2xsIGZ1bmN0aW9uLiAgKi8KKyNpZiBkZWZpbmVkKF9fTUlOR1czMl9fKSB8fCBkZWZpbmVkKF9fV0FUQ09NQ19fKQorI2RlZmluZSBIQVZFX1NUUlRPTEwgMQorI2VuZGlmCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgdGNnZXRhdHRyIGZ1bmN0aW9uLiAgKi8KKy8qICNkZWZpbmUgSEFWRV9UQ0dFVEFUVFIgMSAqLworCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIHRjc2V0YXR0ciBmdW5jdGlvbi4gICovCisvKiAjZGVmaW5lIEhBVkVfVENTRVRBVFRSIDEgKi8KKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSB1dGltZSBmdW5jdGlvbiAqLworI2RlZmluZSBIQVZFX1VUSU1FIDEKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBnZXRuYW1laW5mbyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9HRVROQU1FSU5GTyAxCisKKy8qIERlZmluZSB0byB0aGUgdHlwZSBxdWFsaWZpZXIgb2YgYXJnIDEgZm9yIGdldG5hbWVpbmZvLiAqLworI2RlZmluZSBHRVROQU1FSU5GT19RVUFMX0FSRzEgY29uc3QKKworLyogRGVmaW5lIHRvIHRoZSB0eXBlIG9mIGFyZyAxIGZvciBnZXRuYW1laW5mby4gKi8KKyNkZWZpbmUgR0VUTkFNRUlORk9fVFlQRV9BUkcxIHN0cnVjdCBzb2NrYWRkciAqCisKKy8qIERlZmluZSB0byB0aGUgdHlwZSBvZiBhcmcgMiBmb3IgZ2V0bmFtZWluZm8uICovCisjZGVmaW5lIEdFVE5BTUVJTkZPX1RZUEVfQVJHMiBzb2NrbGVuX3QKKworLyogRGVmaW5lIHRvIHRoZSB0eXBlIG9mIGFyZ3MgNCBhbmQgNiBmb3IgZ2V0bmFtZWluZm8uICovCisjZGVmaW5lIEdFVE5BTUVJTkZPX1RZUEVfQVJHNDYgRFdPUkQKKworLyogRGVmaW5lIHRvIHRoZSB0eXBlIG9mIGFyZyA3IGZvciBnZXRuYW1laW5mby4gKi8KKyNkZWZpbmUgR0VUTkFNRUlORk9fVFlQRV9BUkc3IGludAorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIHJlY3YgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfUkVDViAxCisKKy8qIERlZmluZSB0byB0aGUgdHlwZSBvZiBhcmcgMSBmb3IgcmVjdi4gKi8KKyNkZWZpbmUgUkVDVl9UWVBFX0FSRzEgU09DS0VUCisKKy8qIERlZmluZSB0byB0aGUgdHlwZSBvZiBhcmcgMiBmb3IgcmVjdi4gKi8KKyNkZWZpbmUgUkVDVl9UWVBFX0FSRzIgY2hhciAqCisKKy8qIERlZmluZSB0byB0aGUgdHlwZSBvZiBhcmcgMyBmb3IgcmVjdi4gKi8KKyNkZWZpbmUgUkVDVl9UWVBFX0FSRzMgaW50CisKKy8qIERlZmluZSB0byB0aGUgdHlwZSBvZiBhcmcgNCBmb3IgcmVjdi4gKi8KKyNkZWZpbmUgUkVDVl9UWVBFX0FSRzQgaW50CisKKy8qIERlZmluZSB0byB0aGUgZnVuY3Rpb24gcmV0dXJuIHR5cGUgZm9yIHJlY3YuICovCisjZGVmaW5lIFJFQ1ZfVFlQRV9SRVRWIGludAorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIHJlY3Zmcm9tIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX1JFQ1ZGUk9NIDEKKworLyogRGVmaW5lIHRvIHRoZSB0eXBlIG9mIGFyZyAxIGZvciByZWN2ZnJvbS4gKi8KKyNkZWZpbmUgUkVDVkZST01fVFlQRV9BUkcxIFNPQ0tFVAorCisvKiBEZWZpbmUgdG8gdGhlIHR5cGUgcG9pbnRlZCBieSBhcmcgMiBmb3IgcmVjdmZyb20uICovCisjZGVmaW5lIFJFQ1ZGUk9NX1RZUEVfQVJHMiBjaGFyCisKKy8qIERlZmluZSB0byB0aGUgdHlwZSBvZiBhcmcgMyBmb3IgcmVjdmZyb20uICovCisjZGVmaW5lIFJFQ1ZGUk9NX1RZUEVfQVJHMyBpbnQKKworLyogRGVmaW5lIHRvIHRoZSB0eXBlIG9mIGFyZyA0IGZvciByZWN2ZnJvbS4gKi8KKyNkZWZpbmUgUkVDVkZST01fVFlQRV9BUkc0IGludAorCisvKiBEZWZpbmUgdG8gdGhlIHR5cGUgcG9pbnRlZCBieSBhcmcgNSBmb3IgcmVjdmZyb20uICovCisjZGVmaW5lIFJFQ1ZGUk9NX1RZUEVfQVJHNSBzdHJ1Y3Qgc29ja2FkZHIKKworLyogRGVmaW5lIHRvIHRoZSB0eXBlIHBvaW50ZWQgYnkgYXJnIDYgZm9yIHJlY3Zmcm9tLiAqLworI2RlZmluZSBSRUNWRlJPTV9UWVBFX0FSRzYgaW50CisKKy8qIERlZmluZSB0byB0aGUgZnVuY3Rpb24gcmV0dXJuIHR5cGUgZm9yIHJlY3Zmcm9tLiAqLworI2RlZmluZSBSRUNWRlJPTV9UWVBFX1JFVFYgaW50CisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgc2VuZCBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9TRU5EIDEKKworLyogRGVmaW5lIHRvIHRoZSB0eXBlIG9mIGFyZyAxIGZvciBzZW5kLiAqLworI2RlZmluZSBTRU5EX1RZUEVfQVJHMSBTT0NLRVQKKworLyogRGVmaW5lIHRvIHRoZSB0eXBlIHF1YWxpZmllciBvZiBhcmcgMiBmb3Igc2VuZC4gKi8KKyNkZWZpbmUgU0VORF9RVUFMX0FSRzIgY29uc3QKKworLyogRGVmaW5lIHRvIHRoZSB0eXBlIG9mIGFyZyAyIGZvciBzZW5kLiAqLworI2RlZmluZSBTRU5EX1RZUEVfQVJHMiBjaGFyICoKKworLyogRGVmaW5lIHRvIHRoZSB0eXBlIG9mIGFyZyAzIGZvciBzZW5kLiAqLworI2RlZmluZSBTRU5EX1RZUEVfQVJHMyBpbnQKKworLyogRGVmaW5lIHRvIHRoZSB0eXBlIG9mIGFyZyA0IGZvciBzZW5kLiAqLworI2RlZmluZSBTRU5EX1RZUEVfQVJHNCBpbnQKKworLyogRGVmaW5lIHRvIHRoZSBmdW5jdGlvbiByZXR1cm4gdHlwZSBmb3Igc2VuZC4gKi8KKyNkZWZpbmUgU0VORF9UWVBFX1JFVFYgaW50CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICBUWVBFREVGIFJFUExBQ0VNRU5UUyAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyogRGVmaW5lIHRoaXMgaWYgaW5fYWRkcl90IGlzIG5vdCBhbiBhdmFpbGFibGUgJ3R5cGVkZWZlZCcgdHlwZSAqLworI2RlZmluZSBpbl9hZGRyX3QgdW5zaWduZWQgbG9uZworCisvKiBEZWZpbmUgYXMgdGhlIHJldHVybiB0eXBlIG9mIHNpZ25hbCBoYW5kbGVycyAoaW50IG9yIHZvaWQpLiAgKi8KKyNkZWZpbmUgUkVUU0lHVFlQRSB2b2lkCisKKy8qIERlZmluZSBzc2l6ZV90IGlmIGl0IGlzIG5vdCBhbiBhdmFpbGFibGUgJ3R5cGVkZWZlZCcgdHlwZSAqLworI2lmIChkZWZpbmVkKF9fV0FUQ09NQ19fKSAmJiAoX19XQVRDT01DX18gPj0gMTI0MCkpIHx8IGRlZmluZWQoX19QT0NDX18pCisjZWxpZiBkZWZpbmVkKF9XSU42NCkKKyNkZWZpbmUgc3NpemVfdCBfX2ludDY0CisjZWxzZQorI2RlZmluZSBzc2l6ZV90IGludAorI2VuZGlmCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRZUEUgU0laRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyogVGhlIHNpemUgb2YgYGludCcsIGFzIGNvbXB1dGVkIGJ5IHNpemVvZi4gKi8KKyNkZWZpbmUgU0laRU9GX0lOVCA0CisKKy8qIFRoZSBzaXplIG9mIGBsb25nIGRvdWJsZScsIGFzIGNvbXB1dGVkIGJ5IHNpemVvZi4gKi8KKyNkZWZpbmUgU0laRU9GX0xPTkdfRE9VQkxFIDE2CisKKy8qIFRoZSBzaXplIG9mIGBsb25nIGxvbmcnLCBhcyBjb21wdXRlZCBieSBzaXplb2YuICovCisvKiAjZGVmaW5lIFNJWkVPRl9MT05HX0xPTkcgOCAqLworCisvKiBUaGUgc2l6ZSBvZiBgc2hvcnQnLCBhcyBjb21wdXRlZCBieSBzaXplb2YuICovCisjZGVmaW5lIFNJWkVPRl9TSE9SVCAyCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICBTVFJVQ1QgUkVMQVRFRCAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyogRGVmaW5lIHRoaXMgaWYgeW91IGhhdmUgc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgKi8KKy8qICNkZWZpbmUgSEFWRV9TVFJVQ1RfU09DS0FERFJfU1RPUkFHRSAxICovCisKKy8qIERlZmluZSB0aGlzIGlmIHlvdSBoYXZlIHN0cnVjdCB0aW1ldmFsICovCisjZGVmaW5lIEhBVkVfU1RSVUNUX1RJTUVWQUwgMQorCisvKiBEZWZpbmUgdGhpcyBpZiBzdHJ1Y3Qgc29ja2FkZHJfaW42IGhhcyB0aGUgc2luNl9zY29wZV9pZCBtZW1iZXIgKi8KKyNkZWZpbmUgSEFWRV9TT0NLQUREUl9JTjZfU0lONl9TQ09QRV9JRCAxCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgQ09NUElMRVIgU1BFQ0lGSUMgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyogVW5kZWYga2V5d29yZCAnY29uc3QnIGlmIGl0IGRvZXMgbm90IHdvcmsuICAqLworLyogI3VuZGVmIGNvbnN0ICovCisKKy8qIERlZmluZSB0byBhdm9pZCBWUzIwMDUgY29tcGxhaW5pbmcgYWJvdXQgcG9ydGFibGUgQyBmdW5jdGlvbnMgKi8KKyNpZiBkZWZpbmVkKF9NU0NfVkVSKSAmJiAoX01TQ19WRVIgPj0gMTQwMCkKKyNkZWZpbmUgX0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFIDEKKyNkZWZpbmUgX0NSVF9OT05TVERDX05PX0RFUFJFQ0FURSAxCisjZW5kaWYKKworLyogVlMyMDA1IGFuZCBsYXRlciBkYWZhdWx0IHNpemUgZm9yIHRpbWVfdCBpcyA2NC1iaXQsIHVubGVzcyAqLworLyogX1VTRV8zMkJJVF9USU1FX1QgaGFzIGJlZW4gZGVmaW5lZCB0byBnZXQgYSAzMi1iaXQgdGltZV90LiAqLworI2lmIGRlZmluZWQoX01TQ19WRVIpICYmIChfTVNDX1ZFUiA+PSAxNDAwKQorIyAgaWZuZGVmIF9VU0VfMzJCSVRfVElNRV9UCisjICAgIGRlZmluZSBTSVpFT0ZfVElNRV9UIDgKKyMgIGVsc2UKKyMgICAgZGVmaW5lIFNJWkVPRl9USU1FX1QgNAorIyAgZW5kaWYKKyNlbmRpZgorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgIExBUkdFIEZJTEUgU1VQUE9SVCAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNpZiBkZWZpbmVkKF9NU0NfVkVSKSAmJiAhZGVmaW5lZChfV0lOMzJfV0NFKQorIyAgaWYgKF9NU0NfVkVSID49IDkwMCkgJiYgKF9JTlRFR1JBTF9NQVhfQklUUyA+PSA2NCkKKyMgICAgZGVmaW5lIFVTRV9XSU4zMl9MQVJHRV9GSUxFUworIyAgZWxzZQorIyAgICBkZWZpbmUgVVNFX1dJTjMyX1NNQUxMX0ZJTEVTCisjICBlbmRpZgorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChVU0VfV0lOMzJfTEFSR0VfRklMRVMpICYmICFkZWZpbmVkKFVTRV9XSU4zMl9TTUFMTF9GSUxFUykKKyMgIGRlZmluZSBVU0VfV0lOMzJfU01BTExfRklMRVMKKyNlbmRpZgorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIExEQVAgU1VQUE9SVCAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgQ1VSTF9MREFQX1dJTiAxCisjdW5kZWYgSEFWRV9MREFQX1VSTF9QQVJTRQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgQURESVRJT05BTCBERUZJTklUSU9OUyAgICAgICAgICAgICAgICAgICAgICovCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIERlZmluZSBjcHUtbWFjaGluZS1PUyAqLworI3VuZGVmIE9TCisjZGVmaW5lIE9TICJpMzg2LXBjLXdpbjMyY2UiCisKKy8qIE5hbWUgb2YgcGFja2FnZSAqLworI2RlZmluZSBQQUNLQUdFICJjdXJsIgorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgV2luQ0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgQ1VSTF9ESVNBQkxFX0ZJTEUgMQorI2RlZmluZSBDVVJMX0RJU0FCTEVfVEVMTkVUIDEKKyNkZWZpbmUgQ1VSTF9ESVNBQkxFX0xEQVAgMQorCisjZGVmaW5lIEVOT1NQQyAxCisjZGVmaW5lIEVOT01FTSAyCisjZGVmaW5lIEVBR0FJTiAzCisKK2V4dGVybiBpbnQgc3RhdChjb25zdCBjaGFyICpwYXRoLHN0cnVjdCBzdGF0ICpidWZmZXIgKTsKKworI2VuZGlmIC8qIF9fTElCX0NPTkZJR19XSU4zMkNFX0ggKi8KZGlmZiAtLWdpdCBhL2xpYi9jb25maWcuZG9zIGIvbGliL2NvbmZpZy5kb3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzhmMGM2YgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jb25maWcuZG9zCkBAIC0wLDAgKzEsMTY5IEBACisjaWZuZGVmIEhFQURFUl9DT05GSUdfRE9TX0gKKyNkZWZpbmUgSEVBREVSX0NPTkZJR19ET1NfSAorCisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKy8qICAgICAgICBsaWIvY29uZmlnLmRvcyAtIEhhbmQgY3JhZnRlZCBjb25maWcgZmlsZSBmb3IgRE9TICAgICAgICAgKi8KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKworI2lmIGRlZmluZWQoREpHUFApCisgICNkZWZpbmUgT1MgICJNU0RPUy9kamdwcCIKKyNlbGlmIGRlZmluZWQoX19ISUdIQ19fKQorICAjZGVmaW5lIE9TICAiTVNET1MvSGlnaEMiCisjZWxpZiBkZWZpbmVkKF9fV0FUQ09NQ19fKQorICAjZGVmaW5lIE9TICAiTVNET1MvV2F0Y29tIgorI2Vsc2UKKyAgI2RlZmluZSBPUyAgIk1TRE9TLz8iCisjZW5kaWYKKworI2RlZmluZSBQQUNLQUdFICAiY3VybCIKKworI2RlZmluZSBIQVZFX0FSUEFfSU5FVF9IICAgICAgIDEKKyNkZWZpbmUgSEFWRV9GQ05UTF9IICAgICAgICAgICAxCisjZGVmaW5lIEhBVkVfR0VUQUREUklORk8gICAgICAgMQorI2RlZmluZSBIQVZFX0dFVE5BTUVJTkZPICAgICAgIDEKKyNkZWZpbmUgSEFWRV9HRVRQUk9UT0JZTkFNRSAgICAxCisjZGVmaW5lIEhBVkVfR0VUVElNRU9GREFZICAgICAgMQorI2RlZmluZSBIQVZFX0lPX0ggICAgICAgICAgICAgIDEKKyNkZWZpbmUgSEFWRV9JT0NUTCAgICAgICAgICAgICAxCisjZGVmaW5lIEhBVkVfSU9DVExfRklPTkJJTyAgICAgMQorI2RlZmluZSBIQVZFX0lPQ1RMU09DS0VUICAgICAgIDEKKyNkZWZpbmUgSEFWRV9JT0NUTFNPQ0tFVF9GSU9OQklPICAgMQorI2RlZmluZSBIQVZFX0xJTUlUU19IICAgICAgICAgIDEKKyNkZWZpbmUgSEFWRV9MT0NBTEVfSCAgICAgICAgICAxCisjZGVmaW5lIEhBVkVfTE9OR0xPTkcgICAgICAgICAgMQorI2RlZmluZSBIQVZFX01FTU9SWV9IICAgICAgICAgIDEKKyNkZWZpbmUgSEFWRV9ORVREQl9IICAgICAgICAgICAxCisjZGVmaW5lIEhBVkVfTkVUSU5FVF9JTl9IICAgICAgMQorI2RlZmluZSBIQVZFX05FVElORVRfVENQX0ggICAgIDEKKyNkZWZpbmUgSEFWRV9ORVRfSUZfSCAgICAgICAgICAxCisjZGVmaW5lIEhBVkVfUFJPQ0VTU19IICAgICAgICAgMQorI2RlZmluZSBIQVZFX1JFQ1YgICAgICAgICAgICAgIDEKKyNkZWZpbmUgSEFWRV9SRUNWRlJPTSAgICAgICAgICAxCisjZGVmaW5lIEhBVkVfU0VMRUNUICAgICAgICAgICAgMQorI2RlZmluZSBIQVZFX1NFTkQgICAgICAgICAgICAgIDEKKyNkZWZpbmUgSEFWRV9TRVRKTVBfSCAgICAgICAgICAxCisjZGVmaW5lIEhBVkVfU0VUTE9DQUxFICAgICAgICAgMQorI2RlZmluZSBIQVZFX1NFVE1PREUgICAgICAgICAgIDEKKyNkZWZpbmUgSEFWRV9TSUdOQUwgICAgICAgICAgICAxCisjZGVmaW5lIEhBVkVfU09DS0VUICAgICAgICAgICAgMQorI2RlZmluZSBIQVZFX1NQTkVHTyAgICAgICAgICAgIDEKKyNkZWZpbmUgSEFWRV9TVFJEVVAgICAgICAgICAgICAxCisjZGVmaW5lIEhBVkVfU1RSSUNNUCAgICAgICAgICAgMQorI2RlZmluZSBIQVZFX1NUUlRPTEwgICAgICAgICAgIDEKKyNkZWZpbmUgSEFWRV9TVFJVQ1RfVElNRVZBTCAgICAxCisjZGVmaW5lIEhBVkVfU1RSVUNUX0lONl9BRERSICAgMQorI2RlZmluZSBIQVZFX1NZU19JT0NUTF9IICAgICAgIDEKKyNkZWZpbmUgSEFWRV9TWVNfU09DS0VUX0ggICAgICAxCisjZGVmaW5lIEhBVkVfU1lTX1NUQVRfSCAgICAgICAgMQorI2RlZmluZSBIQVZFX1NZU19UWVBFU19IICAgICAgIDEKKyNkZWZpbmUgSEFWRV9URVJNSU9TX0ggICAgICAgICAxCisjZGVmaW5lIEhBVkVfVElNRV9IICAgICAgICAgICAgMQorI2RlZmluZSBIQVZFX1VOSVNURF9IICAgICAgICAgIDEKKworI2RlZmluZSBORUVEX01BTExPQ19IICAgICAgICAgIDEKKworI2RlZmluZSBSRVRTSUdUWVBFICAgICAgICAgICAgIHZvaWQKKyNkZWZpbmUgU0laRU9GX0lOVCAgICAgICAgICAgICA0CisjZGVmaW5lIFNJWkVPRl9MT05HX0RPVUJMRSAgICAgMTYKKyNkZWZpbmUgU0laRU9GX1NIT1JUICAgICAgICAgICAyCisjZGVmaW5lIFNURENfSEVBREVSUyAgICAgICAgICAgMQorI2RlZmluZSBUSU1FX1dJVEhfU1lTX1RJTUUgICAgIDEKKworLyogUXVhbGlmaWVycyBmb3Igc2VuZCgpLCByZWN2KCksIHJlY3Zmcm9tKCkgYW5kIGdldG5hbWVpbmZvKCkuICovCisKKyNkZWZpbmUgU0VORF9UWVBFX0FSRzEgICAgICAgICBpbnQKKyNkZWZpbmUgU0VORF9RVUFMX0FSRzIgICAgICAgICBjb25zdAorI2RlZmluZSBTRU5EX1RZUEVfQVJHMiAgICAgICAgIHZvaWQgKgorI2RlZmluZSBTRU5EX1RZUEVfQVJHMyAgICAgICAgIGludAorI2RlZmluZSBTRU5EX1RZUEVfQVJHNCAgICAgICAgIGludAorI2RlZmluZSBTRU5EX1RZUEVfUkVUViAgICAgICAgIGludAorCisjZGVmaW5lIFJFQ1ZfVFlQRV9BUkcxICAgICAgICAgaW50CisjZGVmaW5lIFJFQ1ZfVFlQRV9BUkcyICAgICAgICAgdm9pZCAqCisjZGVmaW5lIFJFQ1ZfVFlQRV9BUkczICAgICAgICAgaW50CisjZGVmaW5lIFJFQ1ZfVFlQRV9BUkc0ICAgICAgICAgaW50CisjZGVmaW5lIFJFQ1ZfVFlQRV9SRVRWICAgICAgICAgaW50CisKKyNkZWZpbmUgUkVDVkZST01fVFlQRV9BUkcxICAgICBpbnQKKyNkZWZpbmUgUkVDVkZST01fVFlQRV9BUkcyICAgICB2b2lkCisjZGVmaW5lIFJFQ1ZGUk9NX1RZUEVfQVJHMyAgICAgaW50CisjZGVmaW5lIFJFQ1ZGUk9NX1RZUEVfQVJHNCAgICAgaW50CisjZGVmaW5lIFJFQ1ZGUk9NX1RZUEVfQVJHNSAgICAgc3RydWN0IHNvY2thZGRyCisjZGVmaW5lIFJFQ1ZGUk9NX1RZUEVfQVJHNiAgICAgaW50CisjZGVmaW5lIFJFQ1ZGUk9NX1RZUEVfUkVUViAgICAgaW50CisjZGVmaW5lIFJFQ1ZGUk9NX1RZUEVfQVJHMl9JU19WT0lEIDEKKworI2RlZmluZSBHRVROQU1FSU5GT19RVUFMX0FSRzEgIGNvbnN0CisjZGVmaW5lIEdFVE5BTUVJTkZPX1RZUEVfQVJHMSAgc3RydWN0IHNvY2thZGRyICoKKyNkZWZpbmUgR0VUTkFNRUlORk9fVFlQRV9BUkcyICBpbnQKKyNkZWZpbmUgR0VUTkFNRUlORk9fVFlQRV9BUkc0NiBpbnQKKyNkZWZpbmUgR0VUTkFNRUlORk9fVFlQRV9BUkc3ICBpbnQKKworI2RlZmluZSBCU0QKKworLyogQ1VSTERFQlVHIGRlZmluaXRpb24gZW5hYmxlcyBtZW1vcnkgdHJhY2tpbmcgKi8KKy8qICNkZWZpbmUgQ1VSTERFQlVHICovCisKKy8qIFVTRV9aTElCIG9uIGNtZC1saW5lICovCisjaWZkZWYgVVNFX1pMSUIKKyAgI2RlZmluZSBIQVZFX1pMSUJfSCAgICAgICAgICAgIDEKKyAgI2RlZmluZSBIQVZFX0xJQlogICAgICAgICAgICAgIDEKKyNlbmRpZgorCisvKiBVU0VfU1NMRUFZIG9uIGNtZC1saW5lICovCisjaWZkZWYgVVNFX1NTTEVBWQorICAjZGVmaW5lIEhBVkVfQ1JZUFRPX0NMRUFOVVBfQUxMX0VYX0RBVEEgMQorICAjZGVmaW5lIEhBVkVfT1BFTlNTTF9FTkdJTkVfSCAgMQorICAjZGVmaW5lIE9QRU5TU0xfTk9fS1JCNSAgICAgICAgMQorICAjZGVmaW5lIFVTRV9PUEVOU1NMICAgICAgICAgICAgMQorI2VuZGlmCisKKy8qIHRvIGRpc2FibGUgTERBUCAqLworI2RlZmluZSBDVVJMX0RJU0FCTEVfTERBUCAgICAgICAgMQorCisjZGVmaW5lIGluX2FkZHJfdCAgdV9sb25nCisKKyNpZiBkZWZpbmVkKF9fSElHSENfXykgfHwgXAorICAgIChkZWZpbmVkKF9fR05VQ19fKSAmJiAoX19HTlVDX18gPCA0KSkKKyNkZWZpbmUgc3NpemVfdCAgICBpbnQKKyNlbmRpZgorCisjZGVmaW5lIENVUkxfQ0FfQlVORExFICBnZXRlbnYoIkNVUkxfQ0FfQlVORExFIikKKworLyogVGFyZ2V0IEhBVkVfeCBzZWN0aW9uICovCisKKyNpZiBkZWZpbmVkKERKR1BQKQorICAjZGVmaW5lIEhBVkVfQkFTRU5BTUUgICAxCisgICNkZWZpbmUgSEFWRV9TVFJDQVNFQ01QIDEKKyAgI2RlZmluZSBIQVZFX1NJR0FDVElPTiAgMQorICAjZGVmaW5lIEhBVkVfU0lHU0VUSk1QICAxCisgICNkZWZpbmUgSEFWRV9TWVNfVElNRV9IIDEKKyAgI2RlZmluZSBIQVZFX1ZBUklBRElDX01BQ1JPU19HQ0MgMQorCisgICNpZiAoREpHUFBfTUlOT1IgPj0gNCkKKyAgICAjZGVmaW5lIEhBVkVfU1RSTENBVCAgMQorICAjZW5kaWYKKworICAvKiBCZWNhdXNlIGRqZ3BwIDw9IDIuMDMgZG9lc24ndCBoYXZlIHNucHJpbnRmKCkgZXRjLiAqLworICAjaWYgKERKR1BQX01JTk9SIDwgNCkKKyAgICAjZGVmaW5lIF9NUFJJTlRGX1JFUExBQ0UKKyAgI2VuZGlmCisKKyNlbGlmIGRlZmluZWQoX19XQVRDT01DX18pCisgICNkZWZpbmUgSEFWRV9TVFJDQVNFQ01QIDEKKworI2VsaWYgZGVmaW5lZChfX0hJR0hDX18pCisgICNkZWZpbmUgSEFWRV9TWVNfVElNRV9IIDEKKyNlbmRpZgorCisjaWZkZWYgTVNET1MgIC8qIFdhdHQtMzIgKi8KKyAgI2RlZmluZSBIQVZFX0NMT1NFU09DS0VUX0NBTUVMICAxCisgICNkZWZpbmUgQ2xvc2VTb2NrZXQocykgICAgICAgICAgY2xvc2VfcygocykpCisjZW5kaWYKKworI3VuZGVmIHdvcmQKKyN1bmRlZiBieXRlCisKKyNlbmRpZiAvKiBIRUFERVJfQ09ORklHX0RPU19IICovCisKZGlmZiAtLWdpdCBhL2xpYi9jb25uZWN0LmMgYi9saWIvY29ubmVjdC5jCmluZGV4IGViNmRmNzEuLmUxNzg2MzMgMTAwNjQ0Ci0tLSBhL2xpYi9jb25uZWN0LmMKKysrIGIvbGliL2Nvbm5lY3QuYwpAQCAtMTEyLDEwICsxMTIsMTEgQEAKIAogc3RhdGljIGJvb2wgdmVyaWZ5Y29ubmVjdChjdXJsX3NvY2tldF90IHNvY2tmZCwgaW50ICplcnJvcik7CiAKLXN0YXRpYyBjdXJsX3NvY2tldF90CitzdGF0aWMgQ1VSTGNvZGUKIHNpbmdsZWlwY29ubmVjdChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCiAgICAgICAgICAgICAgICAgY29uc3QgQ3VybF9hZGRyaW5mbyAqYWksIC8qIHN0YXJ0IGNvbm5lY3RpbmcgdG8gdGhpcyAqLwogICAgICAgICAgICAgICAgIGxvbmcgdGltZW91dF9tcywKKyAgICAgICAgICAgICAgICBjdXJsX3NvY2tldF90ICpzb2NrLAogICAgICAgICAgICAgICAgIGJvb2wgKmNvbm5lY3RlZCk7CiAKIC8qCkBAIC0xNzMsNiArMTc0LDkgQEAKIAogICAvKiBzdWJzdHJhY3QgZWxhcHNlZCB0aW1lICovCiAgIHRpbWVvdXRfbXMgLT0gQ3VybF90dmRpZmYoKm5vd3AsIGRhdGEtPnByb2dyZXNzLnRfc3RhcnRzaW5nbGUpOworICBpZighdGltZW91dF9tcykKKyAgICAvKiBhdm9pZCByZXR1cm5pbmcgMCBhcyB0aGF0IG1lYW5zIG5vIHRpbWVvdXQhICovCisgICAgcmV0dXJuIC0xOwogCiAgIHJldHVybiB0aW1lb3V0X21zOwogfQpAQCAtMTgwLDE2ICsxODQsMTMgQEAKIC8qCiAgKiB3YWl0Y29ubmVjdCgpIHdhaXRzIGZvciBhIFRDUCBjb25uZWN0IG9uIHRoZSBnaXZlbiBzb2NrZXQgZm9yIHRoZSBzcGVjaWZpZWQKICAqIG51bWJlciBpZiBtaWxsaXNlY29uZHMuIEl0IHJldHVybnM6Ci0gKiAwICAgIGZpbmUgY29ubmVjdAotICogLTEgICBzZWxlY3QoKSBlcnJvcgotICogMSAgICBzZWxlY3QoKSB0aW1lb3V0Ci0gKiAyICAgIHNlbGVjdCgpIHJldHVybmVkIHdpdGggYW4gZXJyb3IgY29uZGl0aW9uIGZkX3NldAogICovCiAKICNkZWZpbmUgV0FJVENPTk5fQ09OTkVDVEVEICAgICAwCiAjZGVmaW5lIFdBSVRDT05OX1NFTEVDVF9FUlJPUiAtMQogI2RlZmluZSBXQUlUQ09OTl9USU1FT1VUICAgICAgIDEKICNkZWZpbmUgV0FJVENPTk5fRkRTRVRfRVJST1IgICAyCisjZGVmaW5lIFdBSVRDT05OX0FCT1JURUQgICAgICAgMwogCiBzdGF0aWMKIGludCB3YWl0Y29ubmVjdChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCkBAIC0yMDksOSArMjEwLDggQEAKICAgICAvKiBub3cgc2VsZWN0KCkgdW50aWwgd2UgZ2V0IGNvbm5lY3Qgb3IgdGltZW91dCAqLwogICAgIHJjID0gQ3VybF9zb2NrZXRfcmVhZHkoQ1VSTF9TT0NLRVRfQkFELCBzb2NrZmQsIChpbnQpKHRpbWVvdXRfbXNlYz4xMDAwPwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwMDA6dGltZW91dF9tc2VjKSk7Ci0KICAgICBpZihDdXJsX3BncnNVcGRhdGUoY29ubikpCi0gICAgICByZXR1cm4gQ1VSTEVfQUJPUlRFRF9CWV9DQUxMQkFDSzsKKyAgICAgIHJldHVybiBXQUlUQ09OTl9BQk9SVEVEOwogCiAgICAgaWYoLTEgPT0gcmMpCiAgICAgICAvKiBlcnJvciwgbm8gY29ubmVjdCBoZXJlLCB0cnkgbmV4dCAqLwpAQCAtNDkyLDM3ICs0OTIsMTMwIEBACiAKIC8qIFVzZWQgd2l0aGluIHRoZSBtdWx0aSBpbnRlcmZhY2UuIFRyeSBuZXh0IElQIGFkZHJlc3MsIHJldHVybiBUUlVFIGlmIG5vCiAgICBtb3JlIGFkZHJlc3MgZXhpc3RzIG9yIGVycm9yICovCi1zdGF0aWMgYm9vbCB0cnluZXh0aXAoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAotICAgICAgICAgICAgICAgICAgICAgIGludCBzb2NraW5kZXgsCi0gICAgICAgICAgICAgICAgICAgICAgYm9vbCAqY29ubmVjdGVkKQorc3RhdGljIENVUkxjb2RlIHRyeW5leHRpcChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzb2NraW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgKmNvbm5lY3RlZCkKIHsKICAgY3VybF9zb2NrZXRfdCBzb2NrZmQ7CiAgIEN1cmxfYWRkcmluZm8gKmFpOwogCi0gIC8qIGZpcnN0IGNsb3NlIHRoZSBmYWlsZWQgc29ja2V0ICovCi0gIHNjbG9zZShjb25uLT5zb2NrW3NvY2tpbmRleF0pOworICAvKiBGaXJzdCBjbGVhbiB1cCBhZnRlciB0aGUgZmFpbGVkIHNvY2tldC4KKyAgICAgRG9uJ3QgY2xvc2UgaXQgeWV0IHRvIGVuc3VyZSB0aGF0IHRoZSBuZXh0IElQJ3Mgc29ja2V0IGdldHMgYSBkaWZmZXJlbnQKKyAgICAgZmlsZSBkZXNjcmlwdG9yLCB3aGljaCBjYW4gcHJldmVudCBidWdzIHdoZW4gdGhlIGN1cmxfbXVsdGlfc29ja2V0X2FjdGlvbgorICAgICBpbnRlcmZhY2UgaXMgdXNlZCB3aXRoIGNlcnRhaW4gc2VsZWN0KCkgcmVwbGFjZW1lbnRzIHN1Y2ggYXMga3F1ZXVlLiAqLworICBjdXJsX3NvY2tldF90IGZkX3RvX2Nsb3NlID0gY29ubi0+c29ja1tzb2NraW5kZXhdOwogICBjb25uLT5zb2NrW3NvY2tpbmRleF0gPSBDVVJMX1NPQ0tFVF9CQUQ7CiAgICpjb25uZWN0ZWQgPSBGQUxTRTsKIAotICBpZihzb2NraW5kZXggIT0gRklSU1RTT0NLRVQpCi0gICAgcmV0dXJuIFRSVUU7IC8qIG5vIG5leHQgKi8KKyAgaWYoc29ja2luZGV4ICE9IEZJUlNUU09DS0VUKSB7CisgICAgc2Nsb3NlKGZkX3RvX2Nsb3NlKTsKKyAgICByZXR1cm4gQ1VSTEVfQ09VTEROVF9DT05ORUNUOyAvKiBubyBuZXh0ICovCisgIH0KIAogICAvKiB0cnkgdGhlIG5leHQgYWRkcmVzcyAqLwogICBhaSA9IGNvbm4tPmlwX2FkZHItPmFpX25leHQ7CiAKICAgd2hpbGUoYWkpIHsKLSAgICBzb2NrZmQgPSBzaW5nbGVpcGNvbm5lY3QoY29ubiwgYWksIDBMLCBjb25uZWN0ZWQpOworICAgIENVUkxjb2RlIHJlcyA9IHNpbmdsZWlwY29ubmVjdChjb25uLCBhaSwgMEwsICZzb2NrZmQsIGNvbm5lY3RlZCk7CisgICAgaWYocmVzKQorICAgICAgcmV0dXJuIHJlczsKICAgICBpZihzb2NrZmQgIT0gQ1VSTF9TT0NLRVRfQkFEKSB7CiAgICAgICAvKiBzdG9yZSB0aGUgbmV3IHNvY2tldCBkZXNjcmlwdG9yICovCiAgICAgICBjb25uLT5zb2NrW3NvY2tpbmRleF0gPSBzb2NrZmQ7CiAgICAgICBjb25uLT5pcF9hZGRyID0gYWk7Ci0gICAgICByZXR1cm4gRkFMU0U7CisgICAgICBzY2xvc2UoZmRfdG9fY2xvc2UpOworICAgICAgcmV0dXJuIENVUkxFX09LOwogICAgIH0KICAgICBhaSA9IGFpLT5haV9uZXh0OwogICB9CisgIHNjbG9zZShmZF90b19jbG9zZSk7CisgIHJldHVybiBDVVJMRV9DT1VMRE5UX0NPTk5FQ1Q7Cit9CisKKy8qIHJldHJpZXZlcyBpcCBhZGRyZXNzIGFuZCBwb3J0IGZyb20gYSBzb2NrYWRkciBzdHJ1Y3R1cmUgKi8KK3N0YXRpYyBib29sIGdldGFkZHJlc3NpbmZvKHN0cnVjdCBzb2NrYWRkciogc2EsIGNoYXIqIGFkZHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nKiBwb3J0KQoreworICB1bnNpZ25lZCBzaG9ydCB1c19wb3J0OworICBzdHJ1Y3Qgc29ja2FkZHJfaW4qIHNpID0gTlVMTDsKKyNpZmRlZiBFTkFCTEVfSVBWNgorICBzdHJ1Y3Qgc29ja2FkZHJfaW42KiBzaTYgPSBOVUxMOworI2VuZGlmCisKKyAgc3dpdGNoIChzYS0+c2FfZmFtaWx5KSB7CisgICAgY2FzZSBBRl9JTkVUOgorICAgICAgc2kgPSAoc3RydWN0IHNvY2thZGRyX2luKikgc2E7CisgICAgICBpZihDdXJsX2luZXRfbnRvcChzYS0+c2FfZmFtaWx5LCAmc2ktPnNpbl9hZGRyLAorICAgICAgICAgICAgICAgICAgICAgICAgYWRkciwgTUFYX0lQQURSX0xFTikgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgdXNfcG9ydCA9IG50b2hzKHNpLT5zaW5fcG9ydCk7CisgICAgICAqcG9ydCA9IHVzX3BvcnQ7CisgICAgICBicmVhazsKKyNpZmRlZiBFTkFCTEVfSVBWNgorICAgIGNhc2UgQUZfSU5FVDY6CisgICAgICBzaTYgPSAoc3RydWN0IHNvY2thZGRyX2luNiopc2E7CisgICAgICBpZihDdXJsX2luZXRfbnRvcChzYS0+c2FfZmFtaWx5LCAmc2k2LT5zaW42X2FkZHIsCisgICAgICAgICAgICAgICAgICAgICAgICBhZGRyLCBNQVhfSVBBRFJfTEVOKSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICB1c19wb3J0ID0gbnRvaHMoc2k2LT5zaW42X3BvcnQpOworICAgICAgKnBvcnQgPSB1c19wb3J0OworICAgICAgYnJlYWs7CisjZW5kaWYKKyAgICBkZWZhdWx0OgorICAgICAgYWRkclswXSA9ICdcMCc7CisgICAgICAqcG9ydCA9IDA7CisgIH0KICAgcmV0dXJuIFRSVUU7CiB9CiAKKy8qIHJldHJpZXZlcyB0aGUgc3RhcnQvZW5kIHBvaW50IGluZm9ybWF0aW9uIG9mIGEgc29ja2V0IG9mIGFuIGVzdGFibGlzaGVkCisgICBjb25uZWN0aW9uICovCit2b2lkIEN1cmxfdXBkYXRlY29ubmluZm8oc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBjdXJsX3NvY2tldF90IHNvY2tmZCkKK3sKKyAgaW50IGVycm9yOworICBjdXJsX3NvY2tsZW5fdCBsZW47CisgIHN0cnVjdCBDdXJsX3NvY2thZGRyX3N0b3JhZ2Ugc3NyZW07CisgIHN0cnVjdCBDdXJsX3NvY2thZGRyX3N0b3JhZ2Ugc3Nsb2M7CisgIHN0cnVjdCBTZXNzaW9uSGFuZGxlICpkYXRhID0gY29ubi0+ZGF0YTsKKyAgc3RydWN0IFB1cmVJbmZvICppbmZvID0gJmNvbm4tPmRhdGEtPmluZm87CisKKyAgaWYoY29ubi0+Yml0cy5yZXVzZSkKKyAgICAvKiByZXVzaW5nIHNhbWUgY29ubmVjdGlvbiAqLworICAgIHJldHVybjsKKworICBsZW4gPSBzaXplb2Yoc3RydWN0IEN1cmxfc29ja2FkZHJfc3RvcmFnZSk7CisgIGlmKGdldHBlZXJuYW1lKHNvY2tmZCwgKHN0cnVjdCBzb2NrYWRkciopICZzc3JlbSwgJmxlbikpIHsKKyAgICBlcnJvciA9IFNPQ0tFUlJOTzsKKyAgICBmYWlsZihkYXRhLCAiZ2V0cGVlcm5hbWUoKSBmYWlsZWQgd2l0aCBlcnJubyAlZDogJXMiLAorICAgICAgICAgIGVycm9yLCBDdXJsX3N0cmVycm9yKGNvbm4sIGVycm9yKSk7CisgICAgcmV0dXJuOworICB9CisKKyAgbGVuID0gc2l6ZW9mKHN0cnVjdCBDdXJsX3NvY2thZGRyX3N0b3JhZ2UpOworICBpZihnZXRzb2NrbmFtZShzb2NrZmQsIChzdHJ1Y3Qgc29ja2FkZHIqKSAmc3Nsb2MsICZsZW4pKSB7CisgICAgZXJyb3IgPSBTT0NLRVJSTk87CisgICAgZmFpbGYoZGF0YSwgImdldHNvY2tuYW1lKCkgZmFpbGVkIHdpdGggZXJybm8gJWQ6ICVzIiwKKyAgICAgICAgICBlcnJvciwgQ3VybF9zdHJlcnJvcihjb25uLCBlcnJvcikpOworICAgIHJldHVybjsKKyAgfQorCisgIGlmKCFnZXRhZGRyZXNzaW5mbygoc3RydWN0IHNvY2thZGRyKikmc3NyZW0sCisgICAgICAgICAgICAgICAgICAgICAgaW5mby0+aXAsICZpbmZvLT5wb3J0KSkgeworICAgIGVycm9yID0gRVJSTk87CisgICAgZmFpbGYoZGF0YSwgInNzcmVtIGluZXRfbnRvcCgpIGZhaWxlZCB3aXRoIGVycm5vICVkOiAlcyIsCisgICAgICAgICAgZXJyb3IsIEN1cmxfc3RyZXJyb3IoY29ubiwgZXJyb3IpKTsKKyAgICByZXR1cm47CisgIH0KKworICBpZighZ2V0YWRkcmVzc2luZm8oKHN0cnVjdCBzb2NrYWRkciopJnNzbG9jLAorICAgICAgICAgICAgICAgICAgICAgaW5mby0+bG9jYWxpcCwgJmluZm8tPmxvY2FscG9ydCkpIHsKKyAgICBlcnJvciA9IEVSUk5POworICAgIGZhaWxmKGRhdGEsICJzc2xvYyBpbmV0X250b3AoKSBmYWlsZWQgd2l0aCBlcnJubyAlZDogJXMiLAorICAgICAgICAgIGVycm9yLCBDdXJsX3N0cmVycm9yKGNvbm4sIGVycm9yKSk7CisgICAgcmV0dXJuOworICB9Cit9CisKIC8qCiAgKiBDdXJsX2lzX2Nvbm5lY3RlZCgpIGlzIHVzZWQgZnJvbSB0aGUgbXVsdGkgaW50ZXJmYWNlIHRvIGNoZWNrIGlmIHRoZQogICogZmlyc3Rzb2NrZXQgaGFzIGNvbm5lY3RlZC4KQEAgLTUzNyw2ICs2MzAsNyBAQAogICBDVVJMY29kZSBjb2RlID0gQ1VSTEVfT0s7CiAgIGN1cmxfc29ja2V0X3Qgc29ja2ZkID0gY29ubi0+c29ja1tzb2NraW5kZXhdOwogICBsb25nIGFsbG93ID0gREVGQVVMVF9DT05ORUNUX1RJTUVPVVQ7CisgIGludCBlcnJvciA9IDA7CiAKICAgREVCVUdBU1NFUlQoc29ja2luZGV4ID49IEZJUlNUU09DS0VUICYmIHNvY2tpbmRleCA8PSBTRUNPTkRBUllTT0NLRVQpOwogCkBAIC01NDQsMTMgKzYzOCw2IEBACiAKICAgaWYoY29ubi0+Yml0cy50Y3Bjb25uZWN0KSB7CiAgICAgLyogd2UgYXJlIGNvbm5lY3RlZCBhbHJlYWR5ISAqLwotICAgIGxvbmcgYWxsb3dfdG90YWwgPSAwOwotCi0gICAgLyogc3VidHJhY3QgdGhlIG1vc3Qgc3RyaWN0IHRpbWVvdXQgb2YgdGhlIG9uZXMgKi8KLSAgICBpZihkYXRhLT5zZXQudGltZW91dCkKLSAgICAgIGFsbG93X3RvdGFsID0gZGF0YS0+c2V0LnRpbWVvdXQ7Ci0KLSAgICBDdXJsX2V4cGlyZShkYXRhLCBhbGxvd190b3RhbCk7CiAgICAgKmNvbm5lY3RlZCA9IFRSVUU7CiAgICAgcmV0dXJuIENVUkxFX09LOwogICB9CkBAIC01NjQsNTIgKzY1MSw1MiBAQAogICAgIHJldHVybiBDVVJMRV9PUEVSQVRJT05fVElNRURPVVQ7CiAgIH0KIAotICBDdXJsX2V4cGlyZShkYXRhLCBhbGxvdyk7Ci0KICAgLyogY2hlY2sgZm9yIGNvbm5lY3Qgd2l0aG91dCB0aW1lb3V0IGFzIHdlIHdhbnQgdG8gcmV0dXJuIGltbWVkaWF0ZWx5ICovCiAgIHJjID0gd2FpdGNvbm5lY3QoY29ubiwgc29ja2ZkLCAwKTsKKyAgaWYoV0FJVENPTk5fVElNRU9VVCA9PSByYykKKyAgICAvKiBub3QgYW4gZXJyb3IsIGJ1dCBhbHNvIG5vIGNvbm5lY3Rpb24geWV0ICovCisgICAgcmV0dXJuIGNvZGU7CiAKICAgaWYoV0FJVENPTk5fQ09OTkVDVEVEID09IHJjKSB7Ci0gICAgaW50IGVycm9yOwogICAgIGlmKHZlcmlmeWNvbm5lY3Qoc29ja2ZkLCAmZXJyb3IpKSB7CiAgICAgICAvKiB3ZSBhcmUgY29ubmVjdGVkLCBhd2Vzb21lISAqLwogICAgICAgY29ubi0+Yml0cy50Y3Bjb25uZWN0ID0gVFJVRTsKICAgICAgICpjb25uZWN0ZWQgPSBUUlVFOworICAgICAgQ3VybF9wZ3JzVGltZShkYXRhLCBUSU1FUl9DT05ORUNUKTsgLyogY29ubmVjdCBkb25lICovCisgICAgICBDdXJsX3ZlcmJvc2Vjb25uZWN0KGNvbm4pOworICAgICAgQ3VybF91cGRhdGVjb25uaW5mbyhjb25uLCBzb2NrZmQpOworCiAgICAgICByZXR1cm4gQ1VSTEVfT0s7CiAgICAgfQogICAgIC8qIG5vcGUsIG5vdCBjb25uZWN0ZWQgZm9yIHJlYWwgKi8KLSAgICBkYXRhLT5zdGF0ZS5vc19lcnJubyA9IGVycm9yOwotICAgIGluZm9mKGRhdGEsICJDb25uZWN0aW9uIGZhaWxlZFxuIik7Ci0gICAgaWYodHJ5bmV4dGlwKGNvbm4sIHNvY2tpbmRleCwgY29ubmVjdGVkKSkgewotICAgICAgZmFpbGYoZGF0YSwgIkZhaWxlZCBjb25uZWN0IHRvICVzOiVsZDsgJXMiLAotICAgICAgICAgICAgY29ubi0+aG9zdC5uYW1lLCBjb25uLT5wb3J0LCBDdXJsX3N0cmVycm9yKGNvbm4sIGVycm9yKSk7Ci0gICAgICBjb2RlID0gQ1VSTEVfQ09VTEROVF9DT05ORUNUOwotICAgIH0KICAgfQotICBlbHNlIGlmKFdBSVRDT05OX1RJTUVPVVQgIT0gcmMpIHsKLSAgICBpbnQgZXJyb3IgPSAwOwotCisgIGVsc2UgewogICAgIC8qIG5vcGUsIG5vdCBjb25uZWN0ZWQgICovCiAgICAgaWYoV0FJVENPTk5fRkRTRVRfRVJST1IgPT0gcmMpIHsKICAgICAgICh2b2lkKXZlcmlmeWNvbm5lY3Qoc29ja2ZkLCAmZXJyb3IpOwotICAgICAgZGF0YS0+c3RhdGUub3NfZXJybm8gPSBlcnJvcjsKLSAgICAgIGluZm9mKGRhdGEsICIlc1xuIixDdXJsX3N0cmVycm9yKGNvbm4sZXJyb3IpKTsKKyAgICAgIGluZm9mKGRhdGEsICIlc1xuIixDdXJsX3N0cmVycm9yKGNvbm4sIGVycm9yKSk7CiAgICAgfQogICAgIGVsc2UKICAgICAgIGluZm9mKGRhdGEsICJDb25uZWN0aW9uIGZhaWxlZFxuIik7Ci0KLSAgICBpZih0cnluZXh0aXAoY29ubiwgc29ja2luZGV4LCBjb25uZWN0ZWQpKSB7Ci0gICAgICBlcnJvciA9IFNPQ0tFUlJOTzsKLSAgICAgIGRhdGEtPnN0YXRlLm9zX2Vycm5vID0gZXJyb3I7Ci0gICAgICBmYWlsZihkYXRhLCAiRmFpbGVkIGNvbm5lY3QgdG8gJXM6JWxkOyAlcyIsCi0gICAgICAgICAgICBjb25uLT5ob3N0Lm5hbWUsIGNvbm4tPnBvcnQsIEN1cmxfc3RyZXJyb3IoY29ubiwgZXJyb3IpKTsKLSAgICAgIGNvZGUgPSBDVVJMRV9DT1VMRE5UX0NPTk5FQ1Q7Ci0gICAgfQogICB9CisKICAgLyoKLSAgICogSWYgdGhlIGNvbm5lY3Rpb24gZmFpbGVkIGhlcmUsIHdlIHNob3VsZCBhdHRlbXB0IHRvIGNvbm5lY3QgdG8gdGhlICJuZXh0Ci0gICAqIGFkZHJlc3MiIGZvciB0aGUgZ2l2ZW4gaG9zdC4KKyAgICogVGhlIGNvbm5lY3Rpb24gZmFpbGVkIGhlcmUsIHdlIHNob3VsZCBhdHRlbXB0IHRvIGNvbm5lY3QgdG8gdGhlICJuZXh0CisgICAqIGFkZHJlc3MiIGZvciB0aGUgZ2l2ZW4gaG9zdC4gQnV0IGZpcnN0IHJlbWVtYmVyIHRoZSBsYXRlc3QgZXJyb3IuCiAgICAqLworICBpZihlcnJvcikgeworICAgIGRhdGEtPnN0YXRlLm9zX2Vycm5vID0gZXJyb3I7CisgICAgU0VUX1NPQ0tFUlJOTyhlcnJvcik7CisgIH0KKworICBjb2RlID0gdHJ5bmV4dGlwKGNvbm4sIHNvY2tpbmRleCwgY29ubmVjdGVkKTsKKworICBpZihjb2RlKSB7CisgICAgZXJyb3IgPSBTT0NLRVJSTk87CisgICAgZGF0YS0+c3RhdGUub3NfZXJybm8gPSBlcnJvcjsKKyAgICBmYWlsZihkYXRhLCAiRmFpbGVkIGNvbm5lY3QgdG8gJXM6JWxkOyAlcyIsCisgICAgICAgICAgY29ubi0+aG9zdC5uYW1lLCBjb25uLT5wb3J0LCBDdXJsX3N0cmVycm9yKGNvbm4sIGVycm9yKSk7CisgIH0KIAogICByZXR1cm4gY29kZTsKIH0KQEAgLTY5MSwxMiArNzc4LDIwIEBACiAjZW5kaWYKIAogCi0vKiBzaW5nbGVpcGNvbm5lY3QoKSBjb25uZWN0cyB0byB0aGUgZ2l2ZW4gSVAgb25seSwgYW5kIGl0IG1heSByZXR1cm4gd2l0aG91dAotICAgaGF2aW5nIGNvbm5lY3RlZCBpZiB1c2VkIGZyb20gdGhlIG11bHRpIGludGVyZmFjZS4gKi8KLXN0YXRpYyBjdXJsX3NvY2tldF90CisvKgorICogc2luZ2xlaXBjb25uZWN0KCkKKyAqCisgKiBOb3RlIHRoYXQgZXZlbiBvbiBjb25uZWN0IGZhaWwgaXQgcmV0dXJucyBDVVJMRV9PSywgYnV0IHdpdGggJ3NvY2snIHNldCB0bworICogQ1VSTF9TT0NLRVRfQkFELiBPdGhlciBlcnJvcnMgd2lsbCBob3dldmVyIHJldHVybiBwcm9wZXIgZXJyb3JzLgorICoKKyAqIHNpbmdsZWlwY29ubmVjdCgpIGNvbm5lY3RzIHRvIHRoZSBnaXZlbiBJUCBvbmx5LCBhbmQgaXQgbWF5IHJldHVybiB3aXRob3V0CisgKiBoYXZpbmcgY29ubmVjdGVkIGlmIHVzZWQgZnJvbSB0aGUgbXVsdGkgaW50ZXJmYWNlLgorICovCitzdGF0aWMgQ1VSTGNvZGUKIHNpbmdsZWlwY29ubmVjdChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCiAgICAgICAgICAgICAgICAgY29uc3QgQ3VybF9hZGRyaW5mbyAqYWksCiAgICAgICAgICAgICAgICAgbG9uZyB0aW1lb3V0X21zLAorICAgICAgICAgICAgICAgIGN1cmxfc29ja2V0X3QgKnNvY2twLAogICAgICAgICAgICAgICAgIGJvb2wgKmNvbm5lY3RlZCkKIHsKICAgc3RydWN0IEN1cmxfc29ja2FkZHJfZXggYWRkcjsKQEAgLTcwNiwxMyArODAxLDE1IEBACiAgIGJvb2wgaXNjb25uZWN0ZWQ7CiAgIHN0cnVjdCBTZXNzaW9uSGFuZGxlICpkYXRhID0gY29ubi0+ZGF0YTsKICAgY3VybF9zb2NrZXRfdCBzb2NrZmQ7Ci0gIENVUkxjb2RlIHJlczsKKyAgQ1VSTGNvZGUgcmVzID0gQ1VSTEVfT0s7CiAgIGNvbnN0IHZvaWQgKmlwdG9wcmludDsKICAgc3RydWN0IHNvY2thZGRyX2luICogY29uc3Qgc2E0ID0gKHZvaWQgKikmYWRkci5zYV9hZGRyOwogI2lmZGVmIEVOQUJMRV9JUFY2CiAgIHN0cnVjdCBzb2NrYWRkcl9pbjYgKiBjb25zdCBzYTYgPSAodm9pZCAqKSZhZGRyLnNhX2FkZHI7CiAjZW5kaWYKIAorICAqc29ja3AgPSBDVVJMX1NPQ0tFVF9CQUQ7CisKICAgLyoKICAgICogVGhlIEN1cmxfc29ja2FkZHJfZXggc3RydWN0dXJlIGlzIGJhc2ljYWxseSBsaWJjdXJsJ3MgZXh0ZXJuYWwgQVBJCiAgICAqIGN1cmxfc29ja2FkZHIgc3RydWN0dXJlIHdpdGggZW5vdWdoIHNwYWNlIGF2YWlsYWJsZSB0byBkaXJlY3RseSBob2xkCkBAIC03NTEsNyArODQ4LDcgQEAKIAogICBpZihzb2NrZmQgPT0gQ1VSTF9TT0NLRVRfQkFEKQogICAgIC8qIG5vIHNvY2tldCwgbm8gY29ubmVjdGlvbiAqLwotICAgIHJldHVybiBDVVJMX1NPQ0tFVF9CQUQ7CisgICAgcmV0dXJuIENVUkxFX09LOwogCiAjaWYgZGVmaW5lZChFTkFCTEVfSVBWNikgJiYgZGVmaW5lZChIQVZFX1NPQ0tBRERSX0lONl9TSU42X1NDT1BFX0lEKQogICBpZiAoY29ubi0+c2NvcGUgJiYgKGFkZHIuZmFtaWx5ID09IEFGX0lORVQ2KSkKQEAgLTgwNCw3ICs5MDEsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENVUkxTT0NLVFlQRV9JUENYTik7CiAgICAgaWYoZXJyb3IpIHsKICAgICAgIHNjbG9zZShzb2NrZmQpOyAvKiBjbG9zZSB0aGUgc29ja2V0IGFuZCBiYWlsIG91dCAqLwotICAgICAgcmV0dXJuIENVUkxfU09DS0VUX0JBRDsKKyAgICAgIHJldHVybiByZXM7CiAgICAgfQogICB9CiAKQEAgLTgxMiw3ICs5MDksNyBAQAogICByZXMgPSBiaW5kbG9jYWwoY29ubiwgc29ja2ZkLCBhZGRyLmZhbWlseSk7CiAgIGlmKHJlcykgewogICAgIHNjbG9zZShzb2NrZmQpOyAvKiBjbG9zZSBzb2NrZXQgYW5kIGJhaWwgb3V0ICovCi0gICAgcmV0dXJuIENVUkxfU09DS0VUX0JBRDsKKyAgICByZXR1cm4gcmVzOwogICB9CiAKICAgLyogc2V0IHNvY2tldCBub24tYmxvY2tpbmcgKi8KQEAgLTg0MCw2ICs5MzcsMTAgQEAKICNlbmRpZgogI2VuZGlmCiAgICAgICByYyA9IHdhaXRjb25uZWN0KGNvbm4sIHNvY2tmZCwgdGltZW91dF9tcyk7CisgICAgICBpZihXQUlUQ09OTl9BQk9SVEVEID09IHJjKSB7CisgICAgICAgIHNjbG9zZShzb2NrZmQpOworICAgICAgICByZXR1cm4gQ1VSTEVfQUJPUlRFRF9CWV9DQUxMQkFDSzsKKyAgICAgIH0KICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6CiAgICAgICAvKiB1bmtub3duIGVycm9yLCBmYWxsdGhyb3VnaCBhbmQgdHJ5IGFub3RoZXIgYWRkcmVzcyEgKi8KQEAgLTg1NSw3ICs5NTYsOCBAQAogICBpZigoV0FJVENPTk5fVElNRU9VVCA9PSByYykgJiYKICAgICAgKGRhdGEtPnN0YXRlLnVzZWRfaW50ZXJmYWNlID09IEN1cmxfaWZfbXVsdGkpKSB7CiAgICAgLyogVGltZW91dCB3aGVuIHJ1bm5pbmcgdGhlIG11bHRpIGludGVyZmFjZSAqLwotICAgIHJldHVybiBzb2NrZmQ7CisgICAgKnNvY2twID0gc29ja2ZkOworICAgIHJldHVybiBDVVJMRV9PSzsKICAgfQogCiAgIGlzY29ubmVjdGVkID0gdmVyaWZ5Y29ubmVjdChzb2NrZmQsICZlcnJvcik7CkBAIC04NjQsNyArOTY2LDkgQEAKICAgICAvKiB3ZSBhcmUgY29ubmVjdGVkLCBhd2Vzb21lISAqLwogICAgICpjb25uZWN0ZWQgPSBUUlVFOyAvKiB0aGlzIGlzIGEgdHJ1ZSBjb25uZWN0ICovCiAgICAgaW5mb2YoZGF0YSwgImNvbm5lY3RlZFxuIik7Ci0gICAgcmV0dXJuIHNvY2tmZDsKKyAgICBDdXJsX3VwZGF0ZWNvbm5pbmZvKGNvbm4sIHNvY2tmZCk7CisgICAgKnNvY2twID0gc29ja2ZkOworICAgIHJldHVybiBDVVJMRV9PSzsKICAgfQogICBlbHNlIGlmKFdBSVRDT05OX1RJTUVPVVQgPT0gcmMpCiAgICAgaW5mb2YoZGF0YSwgIlRpbWVvdXRcbiIpOwpAQCAtODc2LDcgKzk4MCw3IEBACiAgIC8qIGNvbm5lY3QgZmFpbGVkIG9yIHRpbWVkIG91dCAqLwogICBzY2xvc2Uoc29ja2ZkKTsKIAotICByZXR1cm4gQ1VSTF9TT0NLRVRfQkFEOworICByZXR1cm4gQ1VSTEVfT0s7CiB9CiAKIC8qCkBAIC05MTgsNyArMTAyMiw2IEBACiAgICAgZmFpbGYoZGF0YSwgIkNvbm5lY3Rpb24gdGltZS1vdXQiKTsKICAgICByZXR1cm4gQ1VSTEVfT1BFUkFUSU9OX1RJTUVET1VUOwogICB9Ci0gIEN1cmxfZXhwaXJlKGRhdGEsIHRpbWVvdXRfbXMpOwogCiAgIC8qIE1heCB0aW1lIGZvciBlYWNoIGFkZHJlc3MgKi8KICAgbnVtX2FkZHIgPSBDdXJsX251bV9hZGRyZXNzZXMocmVtb3RlaG9zdC0+YWRkcik7CkBAIC05NDEsNyArMTA0NCwxMSBAQAogICAgICAgIGN1cnJfYWRkciA9IGN1cnJfYWRkci0+YWlfbmV4dCwgYWxpYXNpbmRleCsrKSB7CiAKICAgICAvKiBzdGFydCBjb25uZWN0aW5nIHRvIHRoZSBJUCBjdXJyX2FkZHIgcG9pbnRzIHRvICovCi0gICAgc29ja2ZkID0gc2luZ2xlaXBjb25uZWN0KGNvbm4sIGN1cnJfYWRkciwgdGltZW91dF9wZXJfYWRkciwgY29ubmVjdGVkKTsKKyAgICBDVVJMY29kZSByZXMgPQorICAgICAgc2luZ2xlaXBjb25uZWN0KGNvbm4sIGN1cnJfYWRkciwgdGltZW91dF9wZXJfYWRkciwgJnNvY2tmZCwgY29ubmVjdGVkKTsKKworICAgIGlmKHJlcykKKyAgICAgIHJldHVybiByZXM7CiAKICAgICBpZihzb2NrZmQgIT0gQ1VSTF9TT0NLRVRfQkFEKQogICAgICAgYnJlYWs7CkBAIC05NzksMTIgKzEwODYsMTIgQEAKICAqIFVzZWQgdG8gZXh0cmFjdCBzb2NrZXQgYW5kIGNvbm5lY3RkYXRhIHN0cnVjdCBmb3IgdGhlIG1vc3QgcmVjZW50CiAgKiB0cmFuc2ZlciBvbiB0aGUgZ2l2ZW4gU2Vzc2lvbkhhbmRsZS4KICAqCi0gKiBUaGUgc29ja2V0ICdsb25nJyB3aWxsIGJlIC0xIGluIGNhc2Ugb2YgZmFpbHVyZSEKKyAqIFRoZSByZXR1cm5lZCBzb2NrZXQgd2lsbCBiZSBDVVJMX1NPQ0tFVF9CQUQgaW4gY2FzZSBvZiBmYWlsdXJlIQogICovCi1DVVJMY29kZSBDdXJsX2dldGNvbm5lY3RpbmZvKHN0cnVjdCBTZXNzaW9uSGFuZGxlICpkYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nICpwYXJhbV9sb25ncCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbm5lY3RkYXRhICoqY29ubnApCitjdXJsX3NvY2tldF90IEN1cmxfZ2V0Y29ubmVjdGluZm8oc3RydWN0IFNlc3Npb25IYW5kbGUgKmRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbm5lY3RkYXRhICoqY29ubnApCiB7CisgIGN1cmxfc29ja2V0X3Qgc29ja2ZkOwogICBpZigoZGF0YS0+c3RhdGUubGFzdGNvbm5lY3QgIT0gLTEpICYmCiAgICAgIChkYXRhLT5zdGF0ZS5jb25uYy0+Y29ubmVjdHNbZGF0YS0+c3RhdGUubGFzdGNvbm5lY3RdICE9IE5VTEwpKSB7CiAgICAgc3RydWN0IGNvbm5lY3RkYXRhICpjID0KQEAgLTk5MiwxMyArMTA5OSwxMyBAQAogICAgIGlmKGNvbm5wKQogICAgICAgLyogb25seSBzdG9yZSB0aGlzIGlmIHRoZSBjYWxsZXIgY2FyZXMgZm9yIGl0ICovCiAgICAgICAqY29ubnAgPSBjOwotICAgICpwYXJhbV9sb25ncCA9IGMtPnNvY2tbRklSU1RTT0NLRVRdOworICAgIHNvY2tmZCA9IGMtPnNvY2tbRklSU1RTT0NLRVRdOwogICAgIC8qIHdlIGhhdmUgYSBzb2NrZXQgY29ubmVjdGVkLCBsZXQncyBkZXRlcm1pbmUgaWYgdGhlIHNlcnZlciBzaHV0IGRvd24gKi8KICAgICAvKiBkZXRlcm1pbmUgaWYgc3NsICovCiAgICAgaWYoYy0+c3NsW0ZJUlNUU09DS0VUXS51c2UpIHsKICAgICAgIC8qIHVzZSB0aGUgU1NMIGNvbnRleHQgKi8KICAgICAgIGlmKCFDdXJsX3NzbF9jaGVja19jeG4oYykpCi0gICAgICAgICpwYXJhbV9sb25ncCA9IC0xOyAgIC8qIEZJTiByZWNlaXZlZCAqLworICAgICAgICByZXR1cm4gQ1VSTF9TT0NLRVRfQkFEOyAgIC8qIEZJTiByZWNlaXZlZCAqLwogICAgIH0KIC8qIE1pbml4IDMuMSBkb2Vzbid0IHN1cHBvcnQgYW55IGZsYWdzIG9uIHJlY3Y7IGp1c3QgYXNzdW1lIHNvY2tldCBpcyBPSyAqLwogI2lmZGVmIE1TR19QRUVLCkBAIC0xMDA3LDEzICsxMTE0LDEzIEBACiAgICAgICBjaGFyIGJ1ZjsKICAgICAgIGlmKHJlY3YoKFJFQ1ZfVFlQRV9BUkcxKWMtPnNvY2tbRklSU1RTT0NLRVRdLCAoUkVDVl9UWVBFX0FSRzIpJmJ1ZiwKICAgICAgICAgICAgICAgKFJFQ1ZfVFlQRV9BUkczKTEsIChSRUNWX1RZUEVfQVJHNClNU0dfUEVFSykgPT0gMCkgewotICAgICAgICAqcGFyYW1fbG9uZ3AgPSAtMTsgICAvKiBGSU4gcmVjZWl2ZWQgKi8KKyAgICAgICAgcmV0dXJuIENVUkxfU09DS0VUX0JBRDsgICAvKiBGSU4gcmVjZWl2ZWQgKi8KICAgICAgIH0KICAgICB9CiAjZW5kaWYKICAgfQogICBlbHNlCi0gICAgKnBhcmFtX2xvbmdwID0gLTE7CisgICAgcmV0dXJuIENVUkxfU09DS0VUX0JBRDsKIAotICByZXR1cm4gQ1VSTEVfT0s7CisgIHJldHVybiBzb2NrZmQ7CiB9CmRpZmYgLS1naXQgYS9saWIvY29ubmVjdC5oIGIvbGliL2Nvbm5lY3QuaAppbmRleCAzNmVhNGY2Li4yYzZiMTBhIDEwMDY0NAotLS0gYS9saWIvY29ubmVjdC5oCisrKyBiL2xpYi9jb25uZWN0LmgKQEAgLTcsNyArNyw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAwOSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKQEAgLTQ3LDExICs0NywxMCBAQAogICogVXNlZCB0byBleHRyYWN0IHNvY2tldCBhbmQgY29ubmVjdGRhdGEgc3RydWN0IGZvciB0aGUgbW9zdCByZWNlbnQKICAqIHRyYW5zZmVyIG9uIHRoZSBnaXZlbiBTZXNzaW9uSGFuZGxlLgogICoKLSAqIFRoZSBzb2NrZXQgJ2xvbmcnIHdpbGwgYmUgLTEgaW4gY2FzZSBvZiBmYWlsdXJlIQorICogVGhlIHJldHVybmVkIHNvY2tldCB3aWxsIGJlIENVUkxfU09DS0VUX0JBRCBpbiBjYXNlIG9mIGZhaWx1cmUhCiAgKi8KLUNVUkxjb2RlIEN1cmxfZ2V0Y29ubmVjdGluZm8oc3RydWN0IFNlc3Npb25IYW5kbGUgKmRhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgKnBhcmFtX2xvbmdwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29ubmVjdGRhdGEgKipjb25ucCk7CitjdXJsX3NvY2tldF90IEN1cmxfZ2V0Y29ubmVjdGluZm8oc3RydWN0IFNlc3Npb25IYW5kbGUgKmRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbm5lY3RkYXRhICoqY29ubnApOwogCiAjaWZkZWYgV0lOMzIKIC8qIFdoZW4geW91IHJ1biBhIHByb2dyYW0gdGhhdCB1c2VzIHRoZSBXaW5kb3dzIFNvY2tldHMgQVBJLCB5b3UgbWF5CkBAIC02OCw0ICs2Nyw2IEBACiAjZGVmaW5lIEN1cmxfc25kYnVmc2V0KHkpCiAjZW5kaWYKIAordm9pZCBDdXJsX3VwZGF0ZWNvbm5pbmZvKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgY3VybF9zb2NrZXRfdCBzb2NrZmQpOworCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYi9jb250ZW50X2VuY29kaW5nLmMgYi9saWIvY29udGVudF9lbmNvZGluZy5jCmluZGV4IDY5YWE3YmMuLjZmYjdjOGQgMTAwNjQ0Ci0tLSBhL2xpYi9jb250ZW50X2VuY29kaW5nLmMKKysrIGIvbGliL2NvbnRlbnRfZW5jb2RpbmcuYwpAQCAtMTAzLDcgKzEwMyw3IEBACiAgICAgc3RhdHVzID0gaW5mbGF0ZSh6LCBaX1NZTkNfRkxVU0gpOwogICAgIGlmKHN0YXR1cyA9PSBaX09LIHx8IHN0YXR1cyA9PSBaX1NUUkVBTV9FTkQpIHsKICAgICAgIGFsbG93X3Jlc3RhcnQgPSAwOwotICAgICAgaWYoRFNJWiAtIHotPmF2YWlsX291dCkgeworICAgICAgaWYoKERTSVogLSB6LT5hdmFpbF9vdXQpICYmICghay0+aWdub3JlYm9keSkpIHsKICAgICAgICAgcmVzdWx0ID0gQ3VybF9jbGllbnRfd3JpdGUoY29ubiwgQ0xJRU5UV1JJVEVfQk9EWSwgZGVjb21wLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEU0laIC0gei0+YXZhaWxfb3V0KTsKICAgICAgICAgLyogaWYgIUNVUkxFX09LLCBjbGVhbiB1cCwgcmV0dXJuICovCkBAIC0xMjMsNyArMTIzLDkgQEAKICAgICAgIH0KIAogICAgICAgLyogRG9uZSB3aXRoIHRoZXNlIGJ5dGVzLCBleGl0ICovCi0gICAgICBpZihzdGF0dXMgPT0gWl9PSyAmJiB6LT5hdmFpbF9pbiA9PSAwKSB7CisKKyAgICAgIC8qIHN0YXR1cyBpcyBhbHdheXMgWl9PSyBhdCB0aGlzIHBvaW50ISAqLworICAgICAgaWYoei0+YXZhaWxfaW4gPT0gMCkgewogICAgICAgICBmcmVlKGRlY29tcCk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICB9CkBAIC0yNDcsNyArMjQ5LDYgQEAKIAogICAgIC8qIFNraXAgb3ZlciB0aGUgTlVMICovCiAgICAgLS1sZW47Ci0gICAgKytkYXRhOwogICB9CiAKICAgaWYoZmxhZ3MgJiBIRUFEX0NSQykgewpAQCAtMjU1LDcgKzI1Niw2IEBACiAgICAgICByZXR1cm4gR1pJUF9VTkRFUkZMT1c7CiAKICAgICBsZW4gLT0gMjsKLSAgICBkYXRhICs9IDI7CiAgIH0KIAogICAqaGVhZGVybGVuID0gdG90YWxsZW4gLSBsZW47CmRpZmYgLS1naXQgYS9saWIvY3VybF9hZGRyaW5mby5jIGIvbGliL2N1cmxfYWRkcmluZm8uYwppbmRleCBjMzhhMWVkLi41MDk4ZmE0IDEwMDY0NAotLS0gYS9saWIvY3VybF9hZGRyaW5mby5jCisrKyBiL2xpYi9jdXJsX2FkZHJpbmZvLmMKQEAgLTE1MSw3ICsxNTEsMTAgQEAKICAgICBjYS0+YWlfbmV4dCAgICAgID0gTlVMTDsKIAogICAgIGlmKChhaS0+YWlfYWRkcmxlbiA+IDApICYmIChhaS0+YWlfYWRkciAhPSBOVUxMKSkgewotICAgICAgY2EtPmFpX2FkZHJsZW4gID0gYWktPmFpX2FkZHJsZW47CisgICAgICAvKiB0eXBlY2FzdCBiZWxvdyBhdm9pZCB3YXJuaW5nIG9uIGF0IGxlYXN0IHdpbjY0OgorICAgICAgICAgY29udmVyc2lvbiBmcm9tICdzaXplX3QnIHRvICdjdXJsX3NvY2tsZW5fdCcsIHBvc3NpYmxlIGxvc3Mgb2YgZGF0YQorICAgICAgKi8KKyAgICAgIGNhLT5haV9hZGRybGVuICA9IChjdXJsX3NvY2tsZW5fdClhaS0+YWlfYWRkcmxlbjsKICAgICAgIGlmKChjYS0+YWlfYWRkciA9IG1hbGxvYyhjYS0+YWlfYWRkcmxlbikpID09IE5VTEwpIHsKICAgICAgICAgZXJyb3IgPSBFQUlfTUVNT1JZOwogICAgICAgICBmcmVlKGNhKTsKZGlmZiAtLWdpdCBhL2xpYi9jdXJsX2NvbmZpZy5oLmNtYWtlIGIvbGliL2N1cmxfY29uZmlnLmguY21ha2UKaW5kZXggZmQ2YjMyYS4uZGVlYmU3MSAxMDA2NDQKLS0tIGEvbGliL2N1cmxfY29uZmlnLmguY21ha2UKKysrIGIvbGliL2N1cmxfY29uZmlnLmguY21ha2UKQEAgLTU4LDEwICs1OCw3IEBACiAvKiB0byBlbmFibGUgaGlkZGVuIHN5bWJvbHMgKi8KICNjbWFrZWRlZmluZSBDVVJMX0hJRERFTl9TWU1CT0xTICR7Q1VSTF9ISURERU5fU1lNQk9MU30KIAotLyogVyQgTERBUCB3aXRoIG5vbi1XJCBjb21waWxlciAqLwotI2NtYWtlZGVmaW5lIENVUkxfTERBUF9IWUJSSUQgJHtDVVJMX0xEQVBfSFlCUklEfQotCi0vKiBVc2UgVyQgTERBUCBpbXBsZW1lbnRhdGlvbiAqLworLyogVXNlIFdpbmRvd3MgTERBUCBpbXBsZW1lbnRhdGlvbiAqLwogI2NtYWtlZGVmaW5lIENVUkxfTERBUF9XSU4gJHtDVVJMX0xEQVBfV0lOfQogCiAvKiB3aGVuIG5vdCBidWlsZGluZyBhIHNoYXJlZCBsaWJyYXJ5ICovCkBAIC04ODksNiArODg2LDkgQEAKIC8qIGlmIEdudVRMUyBpcyBlbmFibGVkICovCiAjY21ha2VkZWZpbmUgVVNFX0dOVVRMUyAke1VTRV9HTlVUTFN9CiAKKy8qIGlmIFBvbGFyU1NMIGlzIGVuYWJsZWQgKi8KKyNjbWFrZWRlZmluZSBVU0VfUE9MQVJTU0wgJHtVU0VfUE9MQVJTU0x9CisKIC8qIGlmIGxpYlNTSDIgaXMgaW4gdXNlICovCiAjY21ha2VkZWZpbmUgVVNFX0xJQlNTSDIgJHtVU0VfTElCU1NIMn0KIApkaWZmIC0tZ2l0IGEvbGliL2N1cmxfY29uZmlnLmguaW4gYi9saWIvY3VybF9jb25maWcuaC5pbgppbmRleCA4NDZmYjI3Li4xNWVhMzg3IDEwMDY0NAotLS0gYS9saWIvY3VybF9jb25maWcuaC5pbgorKysgYi9saWIvY3VybF9jb25maWcuaC5pbgpAQCAtMjQsNiArMjQsOSBAQAogLyogdG8gZGlzYWJsZSBGVFAgKi8KICN1bmRlZiBDVVJMX0RJU0FCTEVfRlRQCiAKKy8qIHRvIGRpc2FibGUgR29waGVyICovCisjdW5kZWYgQ1VSTF9ESVNBQkxFX0dPUEhFUgorCiAvKiB0byBkaXNhYmxlIEhUVFAgKi8KICN1bmRlZiBDVVJMX0RJU0FCTEVfSFRUUAogCkBAIC02MywxMCArNjYsNyBAQAogLyogdG8gZW5hYmxlIGhpZGRlbiBzeW1ib2xzICovCiAjdW5kZWYgQ1VSTF9ISURERU5fU1lNQk9MUwogCi0vKiBXJCBMREFQIHdpdGggbm9uLVckIGNvbXBpbGVyICovCi0jdW5kZWYgQ1VSTF9MREFQX0hZQlJJRAotCi0vKiBVc2UgVyQgTERBUCBpbXBsZW1lbnRhdGlvbiAqLworLyogVXNlIFdpbmRvd3MgTERBUCBpbXBsZW1lbnRhdGlvbiAqLwogI3VuZGVmIENVUkxfTERBUF9XSU4KIAogLyogd2hlbiBub3QgYnVpbGRpbmcgYSBzaGFyZWQgbGlicmFyeSAqLwpAQCAtMzUyLDYgKzM1Miw5IEBACiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgbGRhcC5oIGhlYWRlciBmaWxlLiAqLwogI3VuZGVmIEhBVkVfTERBUF9ICiAKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgbGRhcF9pbml0X2ZkJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX0xEQVBfSU5JVF9GRAorCiAvKiBVc2UgTERBUFMgaW1wbGVtZW50YXRpb24gKi8KICN1bmRlZiBIQVZFX0xEQVBfU1NMCiAKQEAgLTM2MSw2ICszNjQsOSBAQAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBsZGFwX3VybF9wYXJzZScgZnVuY3Rpb24uICovCiAjdW5kZWYgSEFWRV9MREFQX1VSTF9QQVJTRQogCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGdjcnlwdCcgbGlicmFyeSAoLWxnY3J5cHQpLiAqLworI3VuZGVmIEhBVkVfTElCR0NSWVBUCisKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8bGliZ2VuLmg+IGhlYWRlciBmaWxlLiAqLwogI3VuZGVmIEhBVkVfTElCR0VOX0gKIApAQCAtMzczLDEyICszNzksMjQgQEAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgcmVzb2x2ZScgbGlicmFyeSAoLWxyZXNvbHZlKS4gKi8KICN1bmRlZiBIQVZFX0xJQlJFU09MVkUKIAorLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxsaWJydG1wL3J0bXAuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9MSUJSVE1QX1JUTVBfSAorCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHNzaDInIGxpYnJhcnkgKC1sc3NoMikuICovCiAjdW5kZWYgSEFWRV9MSUJTU0gyCiAKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgbGlic3NoMl9leGl0JyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX0xJQlNTSDJfRVhJVAorCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGxpYnNzaDIuaD4gaGVhZGVyIGZpbGUuICovCiAjdW5kZWYgSEFWRV9MSUJTU0gyX0gKIAorLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBsaWJzc2gyX2luaXQnIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfTElCU1NIMl9JTklUCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgbGlic3NoMl9zY3Bfc2VuZDY0JyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX0xJQlNTSDJfU0NQX1NFTkQ2NAorCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGxpYnNzaDJfdmVyc2lvbicgZnVuY3Rpb24uICovCiAjdW5kZWYgSEFWRV9MSUJTU0gyX1ZFUlNJT04KIApAQCAtNDgyLDYgKzUwMCw5IEBACiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSBhIHdvcmtpbmcgUE9TSVgtc3R5bGUgc3RyZXJyb3JfciBmdW5jdGlvbi4gKi8KICN1bmRlZiBIQVZFX1BPU0lYX1NUUkVSUk9SX1IKIAorLyogaWYgeW91IGhhdmUgPHB0aHJlYWQuaD4gKi8KKyN1bmRlZiBIQVZFX1BUSFJFQURfSAorCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHB3ZC5oPiBoZWFkZXIgZmlsZS4gKi8KICN1bmRlZiBIQVZFX1BXRF9ICiAKQEAgLTkxMiw2ICs5MzMsOSBAQAogLyogaWYgR251VExTIGlzIGVuYWJsZWQgKi8KICN1bmRlZiBVU0VfR05VVExTCiAKKy8qIGlmIGxpYnJ0bXAgaXMgaW4gdXNlICovCisjdW5kZWYgVVNFX0xJQlJUTVAKKwogLyogaWYgbGliU1NIMiBpcyBpbiB1c2UgKi8KICN1bmRlZiBVU0VfTElCU1NIMgogCkBAIC05MjEsMTIgKzk0NSwyMSBAQAogLyogaWYgTlNTIGlzIGVuYWJsZWQgKi8KICN1bmRlZiBVU0VfTlNTCiAKKy8qIFVzZSBPcGVuTERBUC1zcGVjaWZpYyBjb2RlICovCisjdW5kZWYgVVNFX09QRU5MREFQCisKIC8qIGlmIE9wZW5TU0wgaXMgaW4gdXNlICovCiAjdW5kZWYgVVNFX09QRU5TU0wKIAorLyogaWYgUG9sYXJTU0wgaXMgZW5hYmxlZCAqLworI3VuZGVmIFVTRV9QT0xBUlNTTAorCiAvKiBpZiBTU0wgaXMgZW5hYmxlZCAqLwogI3VuZGVmIFVTRV9TU0xFQVkKIAorLyogaWYgeW91IHdhbnQgUE9TSVggdGhyZWFkZWQgRE5TIGxvb2t1cCAqLworI3VuZGVmIFVTRV9USFJFQURTX1BPU0lYCisKIC8qIERlZmluZSB0byAxIGlmIHlvdSBhcmUgYnVpbGRpbmcgYSBXaW5kb3dzIHRhcmdldCB3aXRob3V0IGxhcmdlIGZpbGUKICAgIHN1cHBvcnQuICovCiAjdW5kZWYgVVNFX1dJTjMyX0xBUkdFX0ZJTEVTCmRpZmYgLS1naXQgYS9saWIvY3VybF9mbm1hdGNoLmMgYi9saWIvY3VybF9mbm1hdGNoLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWQ0ZWMxOAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdXJsX2ZubWF0Y2guYwpAQCAtMCwwICsxLDQyNCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyAqCisgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlICJzZXR1cC5oIgorCisjaW5jbHVkZSAiY3VybF9mbm1hdGNoLmgiCisKKyNkZWZpbmUgX01QUklOVEZfUkVQTEFDRSAvKiB1c2Ugb3VyIGZ1bmN0aW9ucyBvbmx5ICovCisjaW5jbHVkZSA8Y3VybC9tcHJpbnRmLmg+CisKKyNpbmNsdWRlICJjdXJsX21lbW9yeS5oIgorLyogVGhlIGxhc3QgI2luY2x1ZGUgZmlsZSBzaG91bGQgYmU6ICovCisjaW5jbHVkZSAibWVtZGVidWcuaCIKKworI2RlZmluZSBDVVJMRk5NX0NIQVJTRVRfTEVOIChzaXplb2YoY2hhcikgKiAyNTYpCisjZGVmaW5lIENVUkxGTk1fQ0hTRVRfU0laRSAoQ1VSTEZOTV9DSEFSU0VUX0xFTiArIDE1KQorCisjZGVmaW5lIENVUkxGTk1fTkVHQVRFICBDVVJMRk5NX0NIQVJTRVRfTEVOCisKKyNkZWZpbmUgQ1VSTEZOTV9BTE5VTSAgIChDVVJMRk5NX0NIQVJTRVRfTEVOICsgMSkKKyNkZWZpbmUgQ1VSTEZOTV9ESUdJVCAgIChDVVJMRk5NX0NIQVJTRVRfTEVOICsgMikKKyNkZWZpbmUgQ1VSTEZOTV9YRElHSVQgIChDVVJMRk5NX0NIQVJTRVRfTEVOICsgMykKKyNkZWZpbmUgQ1VSTEZOTV9BTFBIQSAgIChDVVJMRk5NX0NIQVJTRVRfTEVOICsgNCkKKyNkZWZpbmUgQ1VSTEZOTV9QUklOVCAgIChDVVJMRk5NX0NIQVJTRVRfTEVOICsgNSkKKyNkZWZpbmUgQ1VSTEZOTV9CTEFOSyAgIChDVVJMRk5NX0NIQVJTRVRfTEVOICsgNikKKyNkZWZpbmUgQ1VSTEZOTV9MT1dFUiAgIChDVVJMRk5NX0NIQVJTRVRfTEVOICsgNykKKyNkZWZpbmUgQ1VSTEZOTV9HUkFQSCAgIChDVVJMRk5NX0NIQVJTRVRfTEVOICsgOCkKKyNkZWZpbmUgQ1VSTEZOTV9TUEFDRSAgIChDVVJMRk5NX0NIQVJTRVRfTEVOICsgOSkKKyNkZWZpbmUgQ1VSTEZOTV9VUFBFUiAgIChDVVJMRk5NX0NIQVJTRVRfTEVOICsgMTApCisKK3R5cGVkZWYgZW51bSB7CisgIENVUkxGTk1fTE9PUF9ERUZBVUxUID0gMCwKKyAgQ1VSTEZOTV9MT09QX0JBQ0tTTEFTSAorfSBsb29wX3N0YXRlOworCit0eXBlZGVmIGVudW0geworICBDVVJMRk5NX1NDSFNfREVGQVVMVCA9IDAsCisgIENVUkxGTk1fU0NIU19NQVlSQU5HRSwKKyAgQ1VSTEZOTV9TQ0hTX01BWVJBTkdFMiwKKyAgQ1VSTEZOTV9TQ0hTX1JJR0hUQlIsCisgIENVUkxGTk1fU0NIU19SSUdIVEJSTEVGVEJSCit9IHNldGNoYXJzZXRfc3RhdGU7CisKK3R5cGVkZWYgZW51bSB7CisgIENVUkxGTk1fUEtXX0lOSVQgPSAwLAorICBDVVJMRk5NX1BLV19ERE9UCit9IHBhcnNla2V5X3N0YXRlOworCisjZGVmaW5lIFNFVENIQVJTRVRfT0sgICAgIDEKKyNkZWZpbmUgU0VUQ0hBUlNFVF9GQUlMICAgMAorCitzdGF0aWMgaW50IHBhcnNla2V5d29yZCh1bnNpZ25lZCBjaGFyICoqcGF0dGVybiwgdW5zaWduZWQgY2hhciAqY2hhcnNldCkKK3sKKyAgcGFyc2VrZXlfc3RhdGUgc3RhdGUgPSBDVVJMRk5NX1BLV19JTklUOworI2RlZmluZSBLRVlMRU4gMTAKKyAgY2hhciBrZXl3b3JkW0tFWUxFTl0gPSB7IDAgfTsKKyAgaW50IGZvdW5kID0gRkFMU0U7CisgIGludCBpOworICB1bnNpZ25lZCBjaGFyICpwID0gKnBhdHRlcm47CisgIGZvcihpID0gMDsgIWZvdW5kOyBpKyspIHsKKyAgICBjaGFyIGMgPSAqcCsrOworICAgIGlmKGkgPj0gS0VZTEVOKQorICAgICAgcmV0dXJuIFNFVENIQVJTRVRfRkFJTDsKKyAgICBzd2l0Y2goc3RhdGUpIHsKKyAgICBjYXNlIENVUkxGTk1fUEtXX0lOSVQ6CisgICAgICBpZihJU0FMUEhBKGMpICYmIElTTE9XRVIoYykpCisgICAgICAgIGtleXdvcmRbaV0gPSBjOworICAgICAgZWxzZSBpZihjID09ICc6JykKKyAgICAgICAgc3RhdGUgPSBDVVJMRk5NX1BLV19ERE9UOworICAgICAgZWxzZQorICAgICAgICByZXR1cm4gMDsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgQ1VSTEZOTV9QS1dfRERPVDoKKyAgICAgIGlmKGMgPT0gJ10nKQorICAgICAgICBmb3VuZCA9IFRSVUU7CisgICAgICBlbHNlCisgICAgICAgIHJldHVybiBTRVRDSEFSU0VUX0ZBSUw7CisgICAgfQorICB9CisjdW5kZWYgS0VZTEVOCisKKyAgKnBhdHRlcm4gPSBwOyAvKiBtb3ZlIGNhbGxlcidzIHBhdHRlcm4gcG9pbnRlciAqLworICBpZihzdHJjbXAoa2V5d29yZCwgImRpZ2l0IikgPT0gMCkKKyAgICBjaGFyc2V0W0NVUkxGTk1fRElHSVRdID0gMTsKKyAgZWxzZSBpZihzdHJjbXAoa2V5d29yZCwgImFsbnVtIikgPT0gMCkKKyAgICBjaGFyc2V0W0NVUkxGTk1fQUxOVU1dID0gMTsKKyAgZWxzZSBpZihzdHJjbXAoa2V5d29yZCwgImFscGhhIikgPT0gMCkKKyAgICBjaGFyc2V0W0NVUkxGTk1fQUxQSEFdID0gMTsKKyAgZWxzZSBpZihzdHJjbXAoa2V5d29yZCwgInhkaWdpdCIpID09IDApCisgICAgY2hhcnNldFtDVVJMRk5NX1hESUdJVF0gPSAxOworICBlbHNlIGlmKHN0cmNtcChrZXl3b3JkLCAicHJpbnQiKSA9PSAwKQorICAgIGNoYXJzZXRbQ1VSTEZOTV9QUklOVF0gPSAxOworICBlbHNlIGlmKHN0cmNtcChrZXl3b3JkLCAiZ3JhcGgiKSA9PSAwKQorICAgIGNoYXJzZXRbQ1VSTEZOTV9HUkFQSF0gPSAxOworICBlbHNlIGlmKHN0cmNtcChrZXl3b3JkLCAic3BhY2UiKSA9PSAwKQorICAgIGNoYXJzZXRbQ1VSTEZOTV9TUEFDRV0gPSAxOworICBlbHNlIGlmKHN0cmNtcChrZXl3b3JkLCAiYmxhbmsiKSA9PSAwKQorICAgIGNoYXJzZXRbQ1VSTEZOTV9CTEFOS10gPSAxOworICBlbHNlIGlmKHN0cmNtcChrZXl3b3JkLCAidXBwZXIiKSA9PSAwKQorICAgIGNoYXJzZXRbQ1VSTEZOTV9VUFBFUl0gPSAxOworICBlbHNlIGlmKHN0cmNtcChrZXl3b3JkLCAibG93ZXIiKSA9PSAwKQorICAgIGNoYXJzZXRbQ1VSTEZOTV9MT1dFUl0gPSAxOworICBlbHNlCisgICAgcmV0dXJuIFNFVENIQVJTRVRfRkFJTDsKKyAgcmV0dXJuIFNFVENIQVJTRVRfT0s7Cit9CisKKy8qIHJldHVybnMgMSAodHJ1ZSkgaWYgcGF0dGVybiBpcyBPSywgMCBpZiBpcyBiYWQgKCJwIiBpcyBwYXR0ZXJuIHBvaW50ZXIpICovCitzdGF0aWMgaW50IHNldGNoYXJzZXQodW5zaWduZWQgY2hhciAqKnAsIHVuc2lnbmVkIGNoYXIgKmNoYXJzZXQpCit7CisgIHNldGNoYXJzZXRfc3RhdGUgc3RhdGUgPSBDVVJMRk5NX1NDSFNfREVGQVVMVDsKKyAgdW5zaWduZWQgY2hhciByYW5nZXN0YXJ0ID0gMDsKKyAgdW5zaWduZWQgY2hhciBsYXN0Y2hhciAgID0gMDsKKyAgYm9vbCBzb21ldGhpbmdfZm91bmQgPSBGQUxTRTsKKyAgdW5zaWduZWQgY2hhciBjOworICBmb3IoOzspIHsKKyAgICBjID0gKipwOworICAgIHN3aXRjaChzdGF0ZSkgeworICAgIGNhc2UgQ1VSTEZOTV9TQ0hTX0RFRkFVTFQ6CisgICAgICBpZihJU0FMTlVNKGMpKSB7IC8qIEFTQ0lJIHZhbHVlICovCisgICAgICAgIHJhbmdlc3RhcnQgPSBjOworICAgICAgICBjaGFyc2V0W2NdID0gMTsKKyAgICAgICAgKCpwKSsrOworICAgICAgICBzdGF0ZSA9IENVUkxGTk1fU0NIU19NQVlSQU5HRTsKKyAgICAgICAgc29tZXRoaW5nX2ZvdW5kID0gVFJVRTsKKyAgICAgIH0KKyAgICAgIGVsc2UgaWYoYyA9PSAnXScpIHsKKyAgICAgICAgaWYoc29tZXRoaW5nX2ZvdW5kKQorICAgICAgICAgIHJldHVybiBTRVRDSEFSU0VUX09LOworICAgICAgICBlbHNlCisgICAgICAgICAgc29tZXRoaW5nX2ZvdW5kID0gVFJVRTsKKyAgICAgICAgc3RhdGUgPSBDVVJMRk5NX1NDSFNfUklHSFRCUjsKKyAgICAgICAgY2hhcnNldFtjXSA9IDE7CisgICAgICAgICgqcCkrKzsKKyAgICAgIH0KKyAgICAgIGVsc2UgaWYoYyA9PSAnWycpIHsKKyAgICAgICAgY2hhciBjMiA9ICooKCpwKSsxKTsKKyAgICAgICAgaWYoYzIgPT0gJzonKSB7IC8qIHRoZXJlIGhhcyB0byBiZSBhIGtleXdvcmQgKi8KKyAgICAgICAgICAoKnApICs9IDI7CisgICAgICAgICAgaWYocGFyc2VrZXl3b3JkKHAsIGNoYXJzZXQpKSB7CisgICAgICAgICAgICBzdGF0ZSA9IENVUkxGTk1fU0NIU19ERUZBVUxUOworICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4gU0VUQ0hBUlNFVF9GQUlMOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgIGNoYXJzZXRbY10gPSAxOworICAgICAgICAgICgqcCkrKzsKKyAgICAgICAgfQorICAgICAgICBzb21ldGhpbmdfZm91bmQgPSBUUlVFOworICAgICAgfQorICAgICAgZWxzZSBpZihjID09ICc/JyB8fCBjID09ICcqJykgeworICAgICAgICBzb21ldGhpbmdfZm91bmQgPSBUUlVFOworICAgICAgICBjaGFyc2V0W2NdID0gMTsKKyAgICAgICAgKCpwKSsrOworICAgICAgfQorICAgICAgZWxzZSBpZihjID09ICdeJyB8fCBjID09ICchJykgeworICAgICAgICBpZighc29tZXRoaW5nX2ZvdW5kKSB7CisgICAgICAgICAgaWYoY2hhcnNldFtDVVJMRk5NX05FR0FURV0pIHsKKyAgICAgICAgICAgIGNoYXJzZXRbY10gPSAxOworICAgICAgICAgICAgc29tZXRoaW5nX2ZvdW5kID0gVFJVRTsKKyAgICAgICAgICB9CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgY2hhcnNldFtDVVJMRk5NX05FR0FURV0gPSAxOyAvKiBuZWdhdGUgY2hhcnNldCAqLworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgICBjaGFyc2V0W2NdID0gMTsKKyAgICAgICAgKCpwKSsrOworICAgICAgfQorICAgICAgZWxzZSBpZihjID09ICdcXCcpIHsKKyAgICAgICAgYyA9ICooKysoKnApKTsKKyAgICAgICAgaWYoSVNQUklOVCgoYykpKSB7CisgICAgICAgICAgc29tZXRoaW5nX2ZvdW5kID0gVFJVRTsKKyAgICAgICAgICBzdGF0ZSA9IENVUkxGTk1fU0NIU19NQVlSQU5HRTsKKyAgICAgICAgICBjaGFyc2V0W2NdID0gMTsKKyAgICAgICAgICByYW5nZXN0YXJ0ID0gYzsKKyAgICAgICAgICAoKnApKys7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICAgIHJldHVybiBTRVRDSEFSU0VUX0ZBSUw7CisgICAgICB9CisgICAgICBlbHNlIGlmKGMgPT0gJ1wwJykgeworICAgICAgICByZXR1cm4gU0VUQ0hBUlNFVF9GQUlMOworICAgICAgfQorICAgICAgZWxzZSB7CisgICAgICAgIGNoYXJzZXRbY10gPSAxOworICAgICAgICAoKnApKys7CisgICAgICAgIHNvbWV0aGluZ19mb3VuZCA9IFRSVUU7CisgICAgICB9CisgICAgICBicmVhazsKKyAgICBjYXNlIENVUkxGTk1fU0NIU19NQVlSQU5HRToKKyAgICAgIGlmKGMgPT0gJy0nKSB7CisgICAgICAgIGNoYXJzZXRbY10gPSAxOworICAgICAgICAoKnApKys7CisgICAgICAgIGxhc3RjaGFyID0gJy0nOworICAgICAgICBzdGF0ZSA9IENVUkxGTk1fU0NIU19NQVlSQU5HRTI7CisgICAgICB9CisgICAgICBlbHNlIGlmKGMgPT0gJ1snKSB7CisgICAgICAgIHN0YXRlID0gQ1VSTEZOTV9TQ0hTX0RFRkFVTFQ7CisgICAgICB9CisgICAgICBlbHNlIGlmKElTQUxOVU0oYykpIHsKKyAgICAgICAgY2hhcnNldFtjXSA9IDE7CisgICAgICAgICgqcCkrKzsKKyAgICAgIH0KKyAgICAgIGVsc2UgaWYoYyA9PSAnXFwnKSB7CisgICAgICAgIGMgPSAqKCsrKCpwKSk7CisgICAgICAgIGlmKElTUFJJTlQoYykpIHsKKyAgICAgICAgICBjaGFyc2V0W2NdID0gMTsKKyAgICAgICAgICAoKnApKys7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICAgIHJldHVybiBTRVRDSEFSU0VUX0ZBSUw7CisgICAgICB9CisgICAgICBlbHNlIGlmKGMgPT0gJ10nKSB7CisgICAgICAgIHJldHVybiBTRVRDSEFSU0VUX09LOworICAgICAgfQorICAgICAgZWxzZQorICAgICAgICByZXR1cm4gU0VUQ0hBUlNFVF9GQUlMOworICAgICAgYnJlYWs7CisgICAgY2FzZSBDVVJMRk5NX1NDSFNfTUFZUkFOR0UyOgorICAgICAgaWYoYyA9PSAnXFwnKSB7CisgICAgICAgIGMgPSAqKCsrKCpwKSk7CisgICAgICAgIGlmKCFJU1BSSU5UKGMpKQorICAgICAgICAgIHJldHVybiBTRVRDSEFSU0VUX0ZBSUw7CisgICAgICB9CisgICAgICBpZihjID09ICddJykgeworICAgICAgICByZXR1cm4gU0VUQ0hBUlNFVF9PSzsKKyAgICAgIH0KKyAgICAgIGVsc2UgaWYoYyA9PSAnXFwnKSB7CisgICAgICAgIGMgPSAqKCsrKCpwKSk7CisgICAgICAgIGlmKElTUFJJTlQoYykpIHsKKyAgICAgICAgICBjaGFyc2V0W2NdID0gMTsKKyAgICAgICAgICBzdGF0ZSA9IENVUkxGTk1fU0NIU19ERUZBVUxUOworICAgICAgICAgICgqcCkrKzsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgICAgcmV0dXJuIFNFVENIQVJTRVRfRkFJTDsKKyAgICAgIH0KKyAgICAgIGlmKGMgPj0gcmFuZ2VzdGFydCkgeworICAgICAgICBpZigoSVNMT1dFUihjKSAmJiBJU0xPV0VSKHJhbmdlc3RhcnQpKSB8fAorICAgICAgICAgICAoSVNESUdJVChjKSAmJiBJU0RJR0lUKHJhbmdlc3RhcnQpKSB8fAorICAgICAgICAgICAoSVNVUFBFUihjKSAmJiBJU1VQUEVSKHJhbmdlc3RhcnQpKSkgeworICAgICAgICAgIGNoYXJzZXRbbGFzdGNoYXJdID0gMDsKKyAgICAgICAgICByYW5nZXN0YXJ0Kys7CisgICAgICAgICAgd2hpbGUocmFuZ2VzdGFydCsrIDw9IGMpCisgICAgICAgICAgICBjaGFyc2V0W3Jhbmdlc3RhcnQtMV0gPSAxOworICAgICAgICAgICgqcCkrKzsKKyAgICAgICAgICBzdGF0ZSA9IENVUkxGTk1fU0NIU19ERUZBVUxUOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgICByZXR1cm4gU0VUQ0hBUlNFVF9GQUlMOworICAgICAgfQorICAgICAgYnJlYWs7CisgICAgY2FzZSBDVVJMRk5NX1NDSFNfUklHSFRCUjoKKyAgICAgIGlmKGMgPT0gJ1snKSB7CisgICAgICAgIHN0YXRlID0gQ1VSTEZOTV9TQ0hTX1JJR0hUQlJMRUZUQlI7CisgICAgICAgIGNoYXJzZXRbY10gPSAxOworICAgICAgICAoKnApKys7CisgICAgICB9CisgICAgICBlbHNlIGlmKGMgPT0gJ10nKSB7CisgICAgICAgIHJldHVybiBTRVRDSEFSU0VUX09LOworICAgICAgfQorICAgICAgZWxzZSBpZihjID09ICdcMCcpIHsKKyAgICAgICAgcmV0dXJuIFNFVENIQVJTRVRfRkFJTDsKKyAgICAgIH0KKyAgICAgIGVsc2UgaWYoSVNQUklOVChjKSkgeworICAgICAgICBjaGFyc2V0W2NdID0gMTsKKyAgICAgICAgKCpwKSsrOworICAgICAgICBzdGF0ZSA9IENVUkxGTk1fU0NIU19ERUZBVUxUOworICAgICAgfQorICAgICAgZWxzZQorICAgICAgICAvKiB1c2VkICdnb3RvIGZhaWwnIGluc3RlYWQgb2YgJ3JldHVybiBTRVRDSEFSU0VUX0ZBSUwnIHRvIGF2b2lkIGEKKyAgICAgICAgICogbm9uc2Vuc2Ugd2FybmluZyAnc3RhdGVtZW50IG5vdCByZWFjaGVkJyBhdCBlbmQgb2YgdGhlIGZuYyB3aGVuCisgICAgICAgICAqIGNvbXBpbGluZyBvbiBTb2xhcmlzICovCisgICAgICAgIGdvdG8gZmFpbDsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgQ1VSTEZOTV9TQ0hTX1JJR0hUQlJMRUZUQlI6CisgICAgICBpZihjID09ICddJykgeworICAgICAgICByZXR1cm4gU0VUQ0hBUlNFVF9PSzsKKyAgICAgIH0KKyAgICAgIGVsc2UgeworICAgICAgICBzdGF0ZSAgPSBDVVJMRk5NX1NDSFNfREVGQVVMVDsKKyAgICAgICAgY2hhcnNldFtjXSA9IDE7CisgICAgICAgICgqcCkrKzsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworICAgIH0KKyAgfQorZmFpbDoKKyAgcmV0dXJuIFNFVENIQVJTRVRfRkFJTDsKK30KKworc3RhdGljIGludCBsb29wKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnBhdHRlcm4sIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnN0cmluZykKK3sKKyAgbG9vcF9zdGF0ZSBzdGF0ZSA9IENVUkxGTk1fTE9PUF9ERUZBVUxUOworICB1bnNpZ25lZCBjaGFyICpwID0gKHVuc2lnbmVkIGNoYXIgKilwYXR0ZXJuOworICB1bnNpZ25lZCBjaGFyICpzID0gKHVuc2lnbmVkIGNoYXIgKilzdHJpbmc7CisgIHVuc2lnbmVkIGNoYXIgY2hhcnNldFtDVVJMRk5NX0NIU0VUX1NJWkVdID0geyAwIH07CisgIGludCByYyA9IDA7CisKKyAgZm9yICg7OykgeworICAgIHN3aXRjaChzdGF0ZSkgeworICAgIGNhc2UgQ1VSTEZOTV9MT09QX0RFRkFVTFQ6CisgICAgICBpZigqcCA9PSAnKicpIHsKKyAgICAgICAgd2hpbGUoKihwKzEpID09ICcqJykgLyogZWxpbWluYXRlIG11bHRpcGxlIHN0YXJzICovCisgICAgICAgICAgcCsrOworICAgICAgICBpZigqcyA9PSAnXDAnICYmICoocCsxKSA9PSAnXDAnKQorICAgICAgICAgIHJldHVybiBDVVJMX0ZOTUFUQ0hfTUFUQ0g7CisgICAgICAgIHJjID0gbG9vcChwICsgMSwgcyk7IC8qICoudHh0IG1hdGNoZXMgLnR4dCA8PT4gLnR4dCBtYXRjaGVzIC50eHQgKi8KKyAgICAgICAgaWYocmMgPT0gQ1VSTF9GTk1BVENIX01BVENIKQorICAgICAgICAgIHJldHVybiBDVVJMX0ZOTUFUQ0hfTUFUQ0g7CisgICAgICAgIGlmKCpzKSAvKiBsZXQgdGhlIHN0YXIgZWF0IHVwIG9uZSBjaGFyYWN0ZXIgKi8KKyAgICAgICAgICBzKys7CisgICAgICAgIGVsc2UKKyAgICAgICAgICByZXR1cm4gQ1VSTF9GTk1BVENIX05PTUFUQ0g7CisgICAgICB9CisgICAgICBlbHNlIGlmKCpwID09ICc/JykgeworICAgICAgICBpZihJU1BSSU5UKCpzKSkgeworICAgICAgICAgIHMrKzsKKyAgICAgICAgICBwKys7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZigqcyA9PSAnXDAnKQorICAgICAgICAgIHJldHVybiBDVVJMX0ZOTUFUQ0hfTk9NQVRDSDsKKyAgICAgICAgZWxzZQorICAgICAgICAgIHJldHVybiBDVVJMX0ZOTUFUQ0hfRkFJTDsgLyogY2Fubm90IGRlYWwgd2l0aCBvdGhlciBjaGFyYWN0ZXIgKi8KKyAgICAgIH0KKyAgICAgIGVsc2UgaWYoKnAgPT0gJ1wwJykgeworICAgICAgICBpZigqcyA9PSAnXDAnKQorICAgICAgICAgIHJldHVybiBDVVJMX0ZOTUFUQ0hfTUFUQ0g7CisgICAgICAgIGVsc2UKKyAgICAgICAgICByZXR1cm4gQ1VSTF9GTk1BVENIX05PTUFUQ0g7CisgICAgICB9CisgICAgICBlbHNlIGlmKCpwID09ICdcXCcpIHsKKyAgICAgICAgc3RhdGUgPSBDVVJMRk5NX0xPT1BfQkFDS1NMQVNIOworICAgICAgICBwKys7CisgICAgICB9CisgICAgICBlbHNlIGlmKCpwID09ICdbJykgeworICAgICAgICB1bnNpZ25lZCBjaGFyICpwcCA9IHArMTsgLyogY2Fubm90IGhhbmRsZSB3aXRoIHBvaW50ZXIgdG8gcmVnaXN0ZXIgKi8KKyAgICAgICAgaWYoc2V0Y2hhcnNldCgmcHAsIGNoYXJzZXQpKSB7CisgICAgICAgICAgaW50IGZvdW5kID0gRkFMU0U7CisgICAgICAgICAgaWYoY2hhcnNldFsodW5zaWduZWQgaW50KSpzXSkKKyAgICAgICAgICAgIGZvdW5kID0gVFJVRTsKKyAgICAgICAgICBlbHNlIGlmKGNoYXJzZXRbQ1VSTEZOTV9BTE5VTV0pCisgICAgICAgICAgICBmb3VuZCA9IElTQUxOVU0oKnMpOworICAgICAgICAgIGVsc2UgaWYoY2hhcnNldFtDVVJMRk5NX0FMUEhBXSkKKyAgICAgICAgICAgIGZvdW5kID0gSVNBTFBIQSgqcyk7CisgICAgICAgICAgZWxzZSBpZihjaGFyc2V0W0NVUkxGTk1fRElHSVRdKQorICAgICAgICAgICAgZm91bmQgPSBJU0RJR0lUKCpzKTsKKyAgICAgICAgICBlbHNlIGlmKGNoYXJzZXRbQ1VSTEZOTV9YRElHSVRdKQorICAgICAgICAgICAgZm91bmQgPSBJU1hESUdJVCgqcyk7CisgICAgICAgICAgZWxzZSBpZihjaGFyc2V0W0NVUkxGTk1fUFJJTlRdKQorICAgICAgICAgICAgZm91bmQgPSBJU1BSSU5UKCpzKTsKKyAgICAgICAgICBlbHNlIGlmKGNoYXJzZXRbQ1VSTEZOTV9TUEFDRV0pCisgICAgICAgICAgICBmb3VuZCA9IElTU1BBQ0UoKnMpOworICAgICAgICAgIGVsc2UgaWYoY2hhcnNldFtDVVJMRk5NX1VQUEVSXSkKKyAgICAgICAgICAgIGZvdW5kID0gSVNVUFBFUigqcyk7CisgICAgICAgICAgZWxzZSBpZihjaGFyc2V0W0NVUkxGTk1fTE9XRVJdKQorICAgICAgICAgICAgZm91bmQgPSBJU0xPV0VSKCpzKTsKKyAgICAgICAgICBlbHNlIGlmKGNoYXJzZXRbQ1VSTEZOTV9CTEFOS10pCisgICAgICAgICAgICBmb3VuZCA9IElTQkxBTksoKnMpOworICAgICAgICAgIGVsc2UgaWYoY2hhcnNldFtDVVJMRk5NX0dSQVBIXSkKKyAgICAgICAgICAgIGZvdW5kID0gSVNHUkFQSCgqcyk7CisKKyAgICAgICAgICBpZihjaGFyc2V0W0NVUkxGTk1fTkVHQVRFXSkKKyAgICAgICAgICAgIGZvdW5kID0gIWZvdW5kOworCisgICAgICAgICAgaWYoZm91bmQpIHsKKyAgICAgICAgICAgIHAgPSBwcCsxOworICAgICAgICAgICAgcysrOworICAgICAgICAgICAgbWVtc2V0KGNoYXJzZXQsIDAsIENVUkxGTk1fQ0hTRVRfU0laRSk7CisgICAgICAgICAgfQorICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiBDVVJMX0ZOTUFUQ0hfTk9NQVRDSDsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgICAgcmV0dXJuIENVUkxfRk5NQVRDSF9GQUlMOworICAgICAgfQorICAgICAgZWxzZSB7CisgICAgICAgIGlmKCpwKysgIT0gKnMrKykKKyAgICAgICAgICByZXR1cm4gQ1VSTF9GTk1BVENIX05PTUFUQ0g7CisgICAgICB9CisgICAgICBicmVhazsKKyAgICBjYXNlIENVUkxGTk1fTE9PUF9CQUNLU0xBU0g6CisgICAgICBpZihJU1BSSU5UKCpwKSkgeworICAgICAgICBpZigqcCsrID09ICpzKyspCisgICAgICAgICAgc3RhdGUgPSBDVVJMRk5NX0xPT1BfREVGQVVMVDsKKyAgICAgICAgZWxzZQorICAgICAgICAgIHJldHVybiBDVVJMX0ZOTUFUQ0hfTk9NQVRDSDsKKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIENVUkxfRk5NQVRDSF9GQUlMOworICAgICAgYnJlYWs7CisgICAgfQorICB9Cit9CisKK2ludCBDdXJsX2ZubWF0Y2godm9pZCAqcHRyLCBjb25zdCBjaGFyICpwYXR0ZXJuLCBjb25zdCBjaGFyICpzdHJpbmcpCit7CisgICh2b2lkKXB0cjsgLyogdGhlIGFyZ3VtZW50IGlzIHNwZWNpZmllZCBieSB0aGUgY3VybF9mbm1hdGNoX2NhbGxiYWNrCisgICAgICAgICAgICAgICAgcHJvdG90eXBlLCBidXQgbm90IHVzZWQgYnkgQ3VybF9mbm1hdGNoKCkgKi8KKyAgaWYoIXBhdHRlcm4gfHwgIXN0cmluZykgeworICAgIHJldHVybiBDVVJMX0ZOTUFUQ0hfRkFJTDsKKyAgfQorICByZXR1cm4gbG9vcCgodW5zaWduZWQgY2hhciAqKXBhdHRlcm4sICh1bnNpZ25lZCBjaGFyICopc3RyaW5nKTsKK30KZGlmZiAtLWdpdCBhL2xpYi9jdXJsX2ZubWF0Y2guaCBiL2xpYi9jdXJsX2ZubWF0Y2guaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MzM1ZDAzCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N1cmxfZm5tYXRjaC5oCkBAIC0wLDAgKzEsNDQgQEAKKyNpZm5kZWYgSEVBREVSX0NVUkxfRk5NQVRDSF9ICisjZGVmaW5lIEhFQURFUl9DVVJMX0ZOTUFUQ0hfSAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAwOSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyAqCisgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNkZWZpbmUgQ1VSTF9GTk1BVENIX01BVENIICAgIDAKKyNkZWZpbmUgQ1VSTF9GTk1BVENIX05PTUFUQ0ggIDEKKyNkZWZpbmUgQ1VSTF9GTk1BVENIX0ZBSUwgICAgIDIKKworLyogZGVmYXVsdCBwYXR0ZXJuIG1hdGNoaW5nIGZ1bmN0aW9uCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIEltcGxlbWVudGVkIHdpdGggcmVjdXJzaXZlIGJhY2t0cmFja2luZywgaWYgeW91IHdhbnQgdG8gdXNlIEN1cmxfZm5tYXRjaCwKKyAqIHBsZWFzZSBub3RlIHRoYXQgdGhlcmUgaXMgbm90IGltcGxlbWVudGVkIFVURi9VTklDT0RFIHN1cHBvcnQuCisgKgorICogSW1wbGVtZW50ZWQgZmVhdHVyZXM6CisgKiAnPycgbm90YXRpb24sIGRvZXMgbm90IG1hdGNoIFVURiBjaGFyYWN0ZXJzCisgKiAnKicgY2FuIGFsc28gd29yayB3aXRoIFVURiBzdHJpbmcKKyAqIFthLXpBLVowLTldIGVudW1lcmF0aW9uIHN1cHBvcnQKKyAqCisgKiBrZXl3b3JkczogYWxudW0sIGRpZ2l0LCB4ZGlnaXQsIGFscGhhLCBwcmludCwgYmxhbmssIGxvd2VyLCBncmFwaCwgc3BhY2UKKyAqICAgICAgICAgICBhbmQgdXBwZXIgKHVzZSBhcyAiW1s6YWxudW06XV0iKQorICovCitpbnQgQ3VybF9mbm1hdGNoKHZvaWQgKnB0ciwgY29uc3QgY2hhciAqcGF0dGVybiwgY29uc3QgY2hhciAqc3RyaW5nKTsKKworI2VuZGlmIC8qIEhFQURFUl9DVVJMX0ZOTUFUQ0hfSCAqLwpkaWZmIC0tZ2l0IGEvbGliL2N1cmxfZ2V0aG9zdG5hbWUuYyBiL2xpYi9jdXJsX2dldGhvc3RuYW1lLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2YwYmZlZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdXJsX2dldGhvc3RuYW1lLmMKQEAgLTAsMCArMSw4MSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyAqCisgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlICJzZXR1cC5oIgorCisjaWZkZWYgSEFWRV9VTklTVERfSAorIyAgaW5jbHVkZSA8dW5pc3RkLmg+CisjZW5kaWYKKworI2luY2x1ZGUgImN1cmxfZ2V0aG9zdG5hbWUuaCIKKworLyoKKyAqIEN1cmxfZ2V0aG9zdG5hbWUoKSBpcyBhIHdyYXBwZXIgYXJvdW5kIGdldGhvc3RuYW1lKCkgd2hpY2ggYWxsb3dzCisgKiBvdmVycmlkaW5nIHRoZSBob3N0IG5hbWUgdGhhdCB0aGUgZnVuY3Rpb24gd291bGQgbm9ybWFsbHkgcmV0dXJuLgorICogVGhpcyBjYXBhYmlsaXR5IGlzIHVzZWQgYnkgdGhlIHRlc3Qgc3VpdGUgdG8gdmVyaWZ5IGV4YWN0IG1hdGNoaW5nCisgKiBvZiBOVExNIGF1dGhlbnRpY2F0aW9uLCB3aGljaCBleGVyY2lzZXMgbGliY3VybCdzIE1ENCBhbmQgREVTIGNvZGUuCisgKgorICogRm9yIGxpYmN1cmwgZGVidWcgZW5hYmxlZCBidWlsZHMgaG9zdCBuYW1lIG92ZXJyaWRpbmcgdGFrZXMgcGxhY2UKKyAqIHdoZW4gZW52aXJvbm1lbnQgdmFyaWFibGUgQ1VSTF9HRVRIT1NUTkFNRSBpcyBzZXQsIHVzaW5nIHRoZSB2YWx1ZQorICogaGVsZCBieSB0aGUgdmFyaWFibGUgdG8gb3ZlcnJpZGUgcmV0dXJuZWQgaG9zdCBuYW1lLgorICoKKyAqIEZvciBsaWJjdXJsIHNoYXJlZCBsaWJyYXJ5IHJlbGVhc2UgYnVpbGRzIHRoZSB0ZXN0IHN1aXRlIHByZWxvYWRzCisgKiBhbm90aGVyIHNoYXJlZCBsaWJyYXJ5IG5hbWVkIGxpYmhvc3RuYW1lIHVzaW5nIHRoZSBMRF9QUkVMT0FECisgKiBtZWNoYW5pc20gd2hpY2ggaW50ZXJjZXB0cywgYW5kIG1pZ2h0IG92ZXJyaWRlLCB0aGUgZ2V0aG9zdG5hbWUoKQorICogZnVuY3Rpb24gY2FsbC4gSW4gdGhpcyBjYXNlIGEgZ2l2ZW4gcGxhdGZvcm0gbXVzdCBzdXBwb3J0IHRoZQorICogTERfUFJFTE9BRCBtZWNoYW5pc20gYW5kIGFkZGl0aW9uYWxseSBoYXZlIGVudmlyb25tZW50IHZhcmlhYmxlCisgKiBDVVJMX0dFVEhPU1ROQU1FIHNldCBpbiBvcmRlciB0byBvdmVycmlkZSB0aGUgcmV0dXJuZWQgaG9zdCBuYW1lLgorICoKKyAqIEZvciBsaWJjdXJsIHN0YXRpYyBsaWJyYXJ5IHJlbGVhc2UgYnVpbGRzIG5vIG92ZXJyaWRpbmcgdGFrZXMgcGxhY2UuCisgKi8KKworaW50IEN1cmxfZ2V0aG9zdG5hbWUoY2hhciAqbmFtZSwgR0VUSE9TVE5BTUVfVFlQRV9BUkcyIG5hbWVsZW4pIHsKKworI2lmbmRlZiBIQVZFX0dFVEhPU1ROQU1FCisKKyAgLyogQWxsb3cgY29tcGlsYXRpb24gYW5kIHJldHVybiBmYWlsdXJlIHdoZW4gdW5hdmFpbGFibGUgKi8KKyAgKHZvaWQpIG5hbWU7CisgICh2b2lkKSBuYW1lbGVuOworICByZXR1cm4gLTE7CisKKyNlbHNlCisKKyNpZmRlZiBERUJVR0JVSUxECisKKyAgLyogT3ZlcnJpZGUgaG9zdCBuYW1lIHdoZW4gZW52aXJvbm1lbnQgdmFyaWFibGUgQ1VSTF9HRVRIT1NUTkFNRSBpcyBzZXQgKi8KKyAgY29uc3QgY2hhciAqZm9yY2VfaG9zdG5hbWUgPSBnZXRlbnYoIkNVUkxfR0VUSE9TVE5BTUUiKTsKKyAgaWYoZm9yY2VfaG9zdG5hbWUpIHsKKyAgICBzdHJuY3B5KG5hbWUsIGZvcmNlX2hvc3RuYW1lLCBuYW1lbGVuKTsKKyAgICBuYW1lW25hbWVsZW4tMV0gPSAnXDAnOworICAgIHJldHVybiAwOworICB9CisKKyNlbmRpZiAvKiBERUJVR0JVSUxEICovCisKKyAgLyogVGhlIGNhbGwgdG8gc3lzdGVtJ3MgZ2V0aG9zdG5hbWUoKSBtaWdodCBnZXQgaW50ZXJjZXB0ZWQgYnkgdGhlCisgICAgIGxpYmhvc3RuYW1lIGxpYnJhcnkgd2hlbiBsaWJjdXJsIGlzIGJ1aWx0IGFzIGEgbm9uLWRlYnVnIHNoYXJlZAorICAgICBsaWJyYXJ5IHdoZW4gcnVubmluZyB0aGUgdGVzdCBzdWl0ZS4gKi8KKyAgcmV0dXJuIGdldGhvc3RuYW1lKG5hbWUsIG5hbWVsZW4pOworCisjZW5kaWYKKworfQpkaWZmIC0tZ2l0IGEvbGliL2N1cmxfZ2V0aG9zdG5hbWUuaCBiL2xpYi9jdXJsX2dldGhvc3RuYW1lLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjhlY2Y4OAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdXJsX2dldGhvc3RuYW1lLmgKQEAgLTAsMCArMSwyNyBAQAorI2lmbmRlZiBIRUFERVJfQ1VSTF9HRVRIT1NUTkFNRV9ICisjZGVmaW5lIEhFQURFUl9DVVJMX0dFVEhPU1ROQU1FX0gKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisgKgorICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbnQgQ3VybF9nZXRob3N0bmFtZShjaGFyICpuYW1lLCBHRVRIT1NUTkFNRV9UWVBFX0FSRzIgbmFtZWxlbik7CisKKyNlbmRpZiAvKiBIRUFERVJfQ1VSTF9HRVRIT1NUTkFNRV9IICovCmRpZmYgLS1naXQgYS9saWIvY3VybF9obWFjLmggYi9saWIvY3VybF9obWFjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWI2NWM4YwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdXJsX2htYWMuaApAQCAtMCwwICsxLDY3IEBACisjaWZuZGVmIEhFQURFUl9DVVJMX0hNQUNfSAorI2RlZmluZSBIRUFERVJfQ1VSTF9ITUFDX0gKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisgKgorICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIENVUkxfRElTQUJMRV9DUllQVE9fQVVUSAorCit0eXBlZGVmIHZvaWQgICAgKCogSE1BQ19oaW5pdF9mdW5jKSh2b2lkICogY29udGV4dCk7Cit0eXBlZGVmIHZvaWQgICAgKCogSE1BQ19odXBkYXRlX2Z1bmMpKHZvaWQgKiBjb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICogZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGxlbik7Cit0eXBlZGVmIHZvaWQgICAgKCogSE1BQ19oZmluYWxfZnVuYykodW5zaWduZWQgY2hhciAqIHJlc3VsdCwgdm9pZCAqIGNvbnRleHQpOworCisKKy8qIFBlci1oYXNoIGZ1bmN0aW9uIEhNQUMgcGFyYW1ldGVycy4gKi8KKwordHlwZWRlZiBzdHJ1Y3QgeworICBITUFDX2hpbml0X2Z1bmMgICAgICAgaG1hY19oaW5pdDsgICAgIC8qIEluaXRpYWxpemUgY29udGV4dCBwcm9jZWR1cmUuICovCisgIEhNQUNfaHVwZGF0ZV9mdW5jICAgICBobWFjX2h1cGRhdGU7ICAgLyogVXBkYXRlIGNvbnRleHQgd2l0aCBkYXRhLiAqLworICBITUFDX2hmaW5hbF9mdW5jICAgICAgaG1hY19oZmluYWw7ICAgIC8qIEdldCBmaW5hbCByZXN1bHQgcHJvY2VkdXJlLiAqLworICB1bnNpZ25lZCBpbnQgICAgICAgICAgaG1hY19jdHh0c2l6ZTsgIC8qIENvbnRleHQgc3RydWN0dXJlIHNpemUuICovCisgIHVuc2lnbmVkIGludCAgICAgICAgICBobWFjX21heGtleWxlbjsgLyogTWF4aW11bSBrZXkgbGVuZ3RoIChieXRlcykuICovCisgIHVuc2lnbmVkIGludCAgICAgICAgICBobWFjX3Jlc3VsdGxlbjsgLyogUmVzdWx0IGxlbmd0aCAoYnl0ZXMpLiAqLworfSBITUFDX3BhcmFtczsKKworCisvKiBITUFDIGNvbXB1dGF0aW9uIGNvbnRleHQuICovCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgY29uc3QgSE1BQ19wYXJhbXMgKiAgIGhtYWNfaGFzaDsgICAgICAvKiBIYXNoIGZ1bmN0aW9uIGRlZmluaXRpb24uICovCisgIHZvaWQgKiAgICAgICAgICAgICAgICBobWFjX2hhc2hjdHh0MTsgLyogSGFzaCBmdW5jdGlvbiBjb250ZXh0IDEuICovCisgIHZvaWQgKiAgICAgICAgICAgICAgICBobWFjX2hhc2hjdHh0MjsgLyogSGFzaCBmdW5jdGlvbiBjb250ZXh0IDIuICovCit9IEhNQUNfY29udGV4dDsKKworCisvKiBQcm90b3R5cGVzLiAqLworCitITUFDX2NvbnRleHQgKiBDdXJsX0hNQUNfaW5pdChjb25zdCBITUFDX3BhcmFtcyAqIGhhc2hwYXJhbXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICoga2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGtleWxlbik7CitpbnQgQ3VybF9ITUFDX3VwZGF0ZShITUFDX2NvbnRleHQgKiBjb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqIGRhdGEsCisgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbGVuKTsKK2ludCBDdXJsX0hNQUNfZmluYWwoSE1BQ19jb250ZXh0ICogY29udGV4dCwgdW5zaWduZWQgY2hhciAqIHJlc3VsdCk7CisKKyNlbmRpZgorCisjZW5kaWYgLyogSEVBREVSX0NVUkxfSE1BQ19IICovCmRpZmYgLS1naXQgYS9saWIvY3VybF9sZGFwLmggYi9saWIvY3VybF9sZGFwLmgKaW5kZXggMWYyOGFmZS4uM2NjZTRiZiAxMDA2NDQKLS0tIGEvbGliL2N1cmxfbGRhcC5oCisrKyBiL2xpYi9jdXJsX2xkYXAuaApAQCAtOCw3ICs4LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDA3LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpAQCAtMjUsNyArMjUsOCBAQAogI2lmbmRlZiBDVVJMX0RJU0FCTEVfTERBUAogZXh0ZXJuIGNvbnN0IHN0cnVjdCBDdXJsX2hhbmRsZXIgQ3VybF9oYW5kbGVyX2xkYXA7CiAKLSNpZmRlZiBIQVZFX0xEQVBfU1NMCisjaWYgKGRlZmluZWQoVVNFX09QRU5MREFQKSAmJiBkZWZpbmVkKFVTRV9TU0wpKSB8fCBcCisgICAoIWRlZmluZWQoVVNFX09QRU5MREFQKSAmJiBkZWZpbmVkKEhBVkVfTERBUF9TU0wpKQogZXh0ZXJuIGNvbnN0IHN0cnVjdCBDdXJsX2hhbmRsZXIgQ3VybF9oYW5kbGVyX2xkYXBzOwogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2xpYi9jdXJsX21kNC5oIGIvbGliL2N1cmxfbWQ0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmI2YzE2ZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jdXJsX21kNC5oCkBAIC0wLDAgKzEsMzMgQEAKKyNpZm5kZWYgSEVBREVSX0NVUkxfTUQ0X0gKKyNkZWZpbmUgSEVBREVSX0NVUkxfTUQ0X0gKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisgKgorICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSAic2V0dXAuaCIKKworLyogTlNTIGNyeXB0byBsaWJyYXJ5IGRvZXMgbm90IHByb3ZpZGUgdGhlIE1ENCBoYXNoIGFsZ29yaXRobSwgc28gdGhhdCB3ZSBoYXZlCisgKiBhIGxvY2FsIGltcGxlbWVudGF0aW9uIG9mIGl0ICovCisjaWZkZWYgVVNFX05TUwordm9pZCBDdXJsX21kNGl0KHVuc2lnbmVkIGNoYXIgKm91dHB1dCwgY29uc3QgdW5zaWduZWQgY2hhciAqaW5wdXQsIHNpemVfdCBsZW4pOworI2VuZGlmIC8qIFVTRV9OU1MgKi8KKworI2VuZGlmIC8qIEhFQURFUl9DVVJMX01ENF9IICovCmRpZmYgLS1naXQgYS9saWIvY3VybF9tZDUuaCBiL2xpYi9jdXJsX21kNS5oCmluZGV4IGNhYjk5MTUuLmRkYzYxZTMgMTAwNjQ0Ci0tLSBhL2xpYi9jdXJsX21kNS5oCisrKyBiL2xpYi9jdXJsX21kNS5oCkBAIC0yMiw3ICsyMiwxMyBAQAogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKKyNpZm5kZWYgQ1VSTF9ESVNBQkxFX0NSWVBUT19BVVRICisjaW5jbHVkZSAiY3VybF9obWFjLmgiCisKK2V4dGVybiBjb25zdCBITUFDX3BhcmFtcyBDdXJsX0hNQUNfTUQ1WzFdOworCiB2b2lkIEN1cmxfbWQ1aXQodW5zaWduZWQgY2hhciAqb3V0cHV0LAogICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmlucHV0KTsKKyNlbmRpZgogCiAjZW5kaWYgLyogSEVBREVSX0NVUkxfTUQ1X0ggKi8KZGlmZiAtLWdpdCBhL2xpYi9jdXJsX3J0bXAuYyBiL2xpYi9jdXJsX3J0bXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZjMwZGMxCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2N1cmxfcnRtcC5jCkBAIC0wLDAgKzEsMjg0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIEhvd2FyZCBDaHUsIDxoeWNAaGlnaGxhbmRzdW4uY29tPgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgInNldHVwLmgiCisKKyNpZmRlZiBVU0VfTElCUlRNUAorCisjaW5jbHVkZSAidXJsZGF0YS5oIgorI2luY2x1ZGUgIm5vbmJsb2NrLmgiIC8qIGZvciBjdXJseF9ub25ibG9jayAqLworI2luY2x1ZGUgInByb2dyZXNzLmgiIC8qIGZvciBDdXJsX3BncnNTZXRVcGxvYWRTaXplICovCisjaW5jbHVkZSAidHJhbnNmZXIuaCIKKyNpbmNsdWRlIDxjdXJsL2N1cmwuaD4KKyNpbmNsdWRlIDxsaWJydG1wL3J0bXAuaD4KKworI2RlZmluZSBfTVBSSU5URl9SRVBMQUNFIC8qIHVzZSBvdXIgZnVuY3Rpb25zIG9ubHkgKi8KKyNpbmNsdWRlIDxjdXJsL21wcmludGYuaD4KKworI2luY2x1ZGUgImN1cmxfbWVtb3J5LmgiCisvKiBUaGUgbGFzdCAjaW5jbHVkZSBmaWxlIHNob3VsZCBiZTogKi8KKyNpbmNsdWRlICJtZW1kZWJ1Zy5oIgorCisjaWZkZWYgX1dJTjMyCisjZGVmaW5lIHNldHNvY2tvcHQoYSxiLGMsZCxlKSAoc2V0c29ja29wdCkoYSxiLGMsKGNvbnN0IGNoYXIgKilkLChpbnQpZSkKKyNkZWZpbmUgU0VUX1JDVlRJTUVPKHR2LHMpICAgaW50IHR2ID0gcyoxMDAwCisjZWxzZQorI2RlZmluZSBTRVRfUkNWVElNRU8odHYscykgICBzdHJ1Y3QgdGltZXZhbCB0diA9IHtzLDB9CisjZW5kaWYKKworI2RlZmluZSBERUZfQlVGVElNRSAgICAoMio2MCo2MCoxMDAwKSAgICAvKiAyIGhvdXJzICovCisKK3N0YXRpYyBDVVJMY29kZSBydG1wX3NldHVwKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubik7CitzdGF0aWMgQ1VSTGNvZGUgcnRtcF9kbyhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGJvb2wgKmRvbmUpOworc3RhdGljIENVUkxjb2RlIHJ0bXBfZG9uZShzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIENVUkxjb2RlLCBib29sIHByZW1hdHVyZSk7CitzdGF0aWMgQ1VSTGNvZGUgcnRtcF9jb25uZWN0KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgYm9vbCAqZG9uZSk7CitzdGF0aWMgQ1VSTGNvZGUgcnRtcF9kaXNjb25uZWN0KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubik7CisKK3N0YXRpYyBDdXJsX3JlY3YgcnRtcF9yZWN2Oworc3RhdGljIEN1cmxfc2VuZCBydG1wX3NlbmQ7CisKKy8qCisgKiBSVE1QIHByb3RvY29sIGhhbmRsZXIuaCwgYmFzZWQgb24gaHR0cDovL3J0bXBkdW1wLm1wbGF5ZXJocS5odQorICovCisKK2NvbnN0IHN0cnVjdCBDdXJsX2hhbmRsZXIgQ3VybF9oYW5kbGVyX3J0bXAgPSB7CisgICJSVE1QIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogc2NoZW1lICovCisgIHJ0bXBfc2V0dXAsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogc2V0dXBfY29ubmVjdGlvbiAqLworICBydG1wX2RvLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRvX2l0ICovCisgIHJ0bXBfZG9uZSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZG9uZSAqLworICBaRVJPX05VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRvX21vcmUgKi8KKyAgcnRtcF9jb25uZWN0LCAgICAgICAgICAgICAgICAgICAgICAgICAvKiBjb25uZWN0X2l0ICovCisgIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogY29ubmVjdGluZyAqLworICBaRVJPX05VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRvaW5nICovCisgIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcHJvdG9fZ2V0c29jayAqLworICBaRVJPX05VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRvaW5nX2dldHNvY2sgKi8KKyAgWkVST19OVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBwZXJmb3JtX2dldHNvY2sgKi8KKyAgcnRtcF9kaXNjb25uZWN0LCAgICAgICAgICAgICAgICAgICAgICAvKiBkaXNjb25uZWN0ICovCisgIFBPUlRfUlRNUCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZGVmcG9ydCAqLworICBQUk9UX1JUTVAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHByb3RvY29sICovCit9OworCitjb25zdCBzdHJ1Y3QgQ3VybF9oYW5kbGVyIEN1cmxfaGFuZGxlcl9ydG1wdCA9IHsKKyAgIlJUTVBUIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzY2hlbWUgKi8KKyAgcnRtcF9zZXR1cCwgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzZXR1cF9jb25uZWN0aW9uICovCisgIHJ0bXBfZG8sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZG9faXQgKi8KKyAgcnRtcF9kb25lLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb25lICovCisgIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZG9fbW9yZSAqLworICBydG1wX2Nvbm5lY3QsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNvbm5lY3RfaXQgKi8KKyAgWkVST19OVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBjb25uZWN0aW5nICovCisgIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZG9pbmcgKi8KKyAgWkVST19OVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBwcm90b19nZXRzb2NrICovCisgIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZG9pbmdfZ2V0c29jayAqLworICBaRVJPX05VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHBlcmZvcm1fZ2V0c29jayAqLworICBydG1wX2Rpc2Nvbm5lY3QsICAgICAgICAgICAgICAgICAgICAgIC8qIGRpc2Nvbm5lY3QgKi8KKyAgUE9SVF9SVE1QVCwgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkZWZwb3J0ICovCisgIFBST1RfUlRNUFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcHJvdG9jb2wgKi8KK307CisKK2NvbnN0IHN0cnVjdCBDdXJsX2hhbmRsZXIgQ3VybF9oYW5kbGVyX3J0bXBlID0geworICAiUlRNUEUiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNjaGVtZSAqLworICBydG1wX3NldHVwLCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNldHVwX2Nvbm5lY3Rpb24gKi8KKyAgcnRtcF9kbywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb19pdCAqLworICBydG1wX2RvbmUsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRvbmUgKi8KKyAgWkVST19OVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb19tb3JlICovCisgIHJ0bXBfY29ubmVjdCwgICAgICAgICAgICAgICAgICAgICAgICAgLyogY29ubmVjdF9pdCAqLworICBaRVJPX05VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNvbm5lY3RpbmcgKi8KKyAgWkVST19OVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb2luZyAqLworICBaRVJPX05VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHByb3RvX2dldHNvY2sgKi8KKyAgWkVST19OVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb2luZ19nZXRzb2NrICovCisgIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcGVyZm9ybV9nZXRzb2NrICovCisgIHJ0bXBfZGlzY29ubmVjdCwgICAgICAgICAgICAgICAgICAgICAgLyogZGlzY29ubmVjdCAqLworICBQT1JUX1JUTVAsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRlZnBvcnQgKi8KKyAgUFJPVF9SVE1QRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBwcm90b2NvbCAqLworfTsKKworY29uc3Qgc3RydWN0IEN1cmxfaGFuZGxlciBDdXJsX2hhbmRsZXJfcnRtcHRlID0geworICAiUlRNUFRFIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNjaGVtZSAqLworICBydG1wX3NldHVwLCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNldHVwX2Nvbm5lY3Rpb24gKi8KKyAgcnRtcF9kbywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb19pdCAqLworICBydG1wX2RvbmUsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRvbmUgKi8KKyAgWkVST19OVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb19tb3JlICovCisgIHJ0bXBfY29ubmVjdCwgICAgICAgICAgICAgICAgICAgICAgICAgLyogY29ubmVjdF9pdCAqLworICBaRVJPX05VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNvbm5lY3RpbmcgKi8KKyAgWkVST19OVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb2luZyAqLworICBaRVJPX05VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHByb3RvX2dldHNvY2sgKi8KKyAgWkVST19OVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb2luZ19nZXRzb2NrICovCisgIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcGVyZm9ybV9nZXRzb2NrICovCisgIHJ0bXBfZGlzY29ubmVjdCwgICAgICAgICAgICAgICAgICAgICAgLyogZGlzY29ubmVjdCAqLworICBQT1JUX1JUTVBULCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRlZnBvcnQgKi8KKyAgUFJPVF9SVE1QVEUgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBwcm90b2NvbCAqLworfTsKKworY29uc3Qgc3RydWN0IEN1cmxfaGFuZGxlciBDdXJsX2hhbmRsZXJfcnRtcHMgPSB7CisgICJSVE1QUyIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogc2NoZW1lICovCisgIHJ0bXBfc2V0dXAsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogc2V0dXBfY29ubmVjdGlvbiAqLworICBydG1wX2RvLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRvX2l0ICovCisgIHJ0bXBfZG9uZSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZG9uZSAqLworICBaRVJPX05VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRvX21vcmUgKi8KKyAgcnRtcF9jb25uZWN0LCAgICAgICAgICAgICAgICAgICAgICAgICAvKiBjb25uZWN0X2l0ICovCisgIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogY29ubmVjdGluZyAqLworICBaRVJPX05VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRvaW5nICovCisgIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcHJvdG9fZ2V0c29jayAqLworICBaRVJPX05VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRvaW5nX2dldHNvY2sgKi8KKyAgWkVST19OVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBwZXJmb3JtX2dldHNvY2sgKi8KKyAgcnRtcF9kaXNjb25uZWN0LCAgICAgICAgICAgICAgICAgICAgICAvKiBkaXNjb25uZWN0ICovCisgIFBPUlRfUlRNUFMsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZGVmcG9ydCAqLworICBQUk9UX1JUTVBTICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHByb3RvY29sICovCit9OworY29uc3Qgc3RydWN0IEN1cmxfaGFuZGxlciBDdXJsX2hhbmRsZXJfcnRtcHRzID0geworICAiUlRNUFRTIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNjaGVtZSAqLworICBydG1wX3NldHVwLCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNldHVwX2Nvbm5lY3Rpb24gKi8KKyAgcnRtcF9kbywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb19pdCAqLworICBydG1wX2RvbmUsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRvbmUgKi8KKyAgWkVST19OVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb19tb3JlICovCisgIHJ0bXBfY29ubmVjdCwgICAgICAgICAgICAgICAgICAgICAgICAgLyogY29ubmVjdF9pdCAqLworICBaRVJPX05VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNvbm5lY3RpbmcgKi8KKyAgWkVST19OVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb2luZyAqLworICBaRVJPX05VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHByb3RvX2dldHNvY2sgKi8KKyAgWkVST19OVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb2luZ19nZXRzb2NrICovCisgIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcGVyZm9ybV9nZXRzb2NrICovCisgIHJ0bXBfZGlzY29ubmVjdCwgICAgICAgICAgICAgICAgICAgICAgLyogZGlzY29ubmVjdCAqLworICBQT1JUX1JUTVBTLCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRlZnBvcnQgKi8KKyAgUFJPVF9SVE1QVFMgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBwcm90b2NvbCAqLworfTsKKworc3RhdGljIENVUkxjb2RlIHJ0bXBfc2V0dXAoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uKQoreworICBSVE1QICpyID0gUlRNUF9BbGxvYygpOworCisgIGlmICghcikKKyAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKKworICBSVE1QX0luaXQocik7CisgIFJUTVBfU2V0QnVmZmVyTVMociwgREVGX0JVRlRJTUUpOworICBpZiAoIVJUTVBfU2V0dXBVUkwociwgY29ubi0+ZGF0YS0+Y2hhbmdlLnVybCkpIHsKKyAgICBSVE1QX0ZyZWUocik7CisgICAgcmV0dXJuIENVUkxFX1VSTF9NQUxGT1JNQVQ7CisgIH0KKyAgY29ubi0+cHJvdG8uZ2VuZXJpYyA9IHI7CisgIHJldHVybiBDVVJMRV9PSzsKK30KKworc3RhdGljIENVUkxjb2RlIHJ0bXBfY29ubmVjdChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGJvb2wgKmRvbmUpCit7CisgIFJUTVAgKnIgPSBjb25uLT5wcm90by5nZW5lcmljOworICBTRVRfUkNWVElNRU8odHYsMTApOworCisgIHItPm1fc2Iuc2Jfc29ja2V0ID0gY29ubi0+c29ja1tGSVJTVFNPQ0tFVF07CisKKyAgLyogV2UgaGF2ZSB0byBrbm93IGlmIGl0J3MgYSB3cml0ZSBiZWZvcmUgd2Ugc2VuZCB0aGUKKyAgICogY29ubmVjdCByZXF1ZXN0IHBhY2tldAorICAgKi8KKyAgaWYgKGNvbm4tPmRhdGEtPnNldC51cGxvYWQpCisgICAgci0+TGluay5wcm90b2NvbCB8PSBSVE1QX0ZFQVRVUkVfV1JJVEU7CisKKyAgLyogRm9yIHBsYWluIHN0cmVhbXMsIHVzZSB0aGUgYnVmZmVyIHRvZ2dsZSB0cmljayB0byBrZWVwIGRhdGEgZmxvd2luZyAqLworICBpZiAoIShyLT5MaW5rLmxGbGFncyAmIFJUTVBfTEZfTElWRSkgJiYgIShyLT5MaW5rLnByb3RvY29sICYgUlRNUF9GRUFUVVJFX0hUVFApKQorICAgIHItPkxpbmsubEZsYWdzIHw9IFJUTVBfTEZfQlVGWDsKKworICBjdXJseF9ub25ibG9jayhyLT5tX3NiLnNiX3NvY2tldCwgRkFMU0UpOworICBzZXRzb2Nrb3B0KHItPm1fc2Iuc2Jfc29ja2V0LCBTT0xfU09DS0VULCBTT19SQ1ZUSU1FTywgKGNoYXIgKikmdHYsIHNpemVvZih0dikpOworCisgIGlmICghUlRNUF9Db25uZWN0MShyLCBOVUxMKSkKKyAgICByZXR1cm4gQ1VSTEVfRkFJTEVEX0lOSVQ7CisKKyAgLyogQ2xpZW50cyBtdXN0IHNlbmQgYSBwZXJpb2RpYyBCeXRlc1JlY2VpdmVkIHJlcG9ydCB0byB0aGUgc2VydmVyICovCisgIHItPm1fYlNlbmRDb3VudGVyID0gdHJ1ZTsKKworICAqZG9uZSA9IFRSVUU7CisgIGNvbm4tPnJlY3ZbRklSU1RTT0NLRVRdID0gcnRtcF9yZWN2OworICBjb25uLT5zZW5kW0ZJUlNUU09DS0VUXSA9IHJ0bXBfc2VuZDsKKyAgcmV0dXJuIENVUkxFX09LOworfQorCitzdGF0aWMgQ1VSTGNvZGUgcnRtcF9kbyhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGJvb2wgKmRvbmUpCit7CisgIFJUTVAgKnIgPSBjb25uLT5wcm90by5nZW5lcmljOworCisgIGlmICghUlRNUF9Db25uZWN0U3RyZWFtKHIsIDApKQorICAgIHJldHVybiBDVVJMRV9GQUlMRURfSU5JVDsKKworICBpZiAoY29ubi0+ZGF0YS0+c2V0LnVwbG9hZCkgeworICAgIEN1cmxfcGdyc1NldFVwbG9hZFNpemUoY29ubi0+ZGF0YSwgY29ubi0+ZGF0YS0+c2V0LmluZmlsZXNpemUpOworICAgIEN1cmxfc2V0dXBfdHJhbnNmZXIoY29ubiwgLTEsIC0xLCBGQUxTRSwgTlVMTCwgRklSU1RTT0NLRVQsIE5VTEwpOworICB9IGVsc2UKKyAgICBDdXJsX3NldHVwX3RyYW5zZmVyKGNvbm4sIEZJUlNUU09DS0VULCAtMSwgRkFMU0UsIE5VTEwsIC0xLCBOVUxMKTsKKyAgKmRvbmUgPSBUUlVFOworICByZXR1cm4gQ1VSTEVfT0s7Cit9CisKK3N0YXRpYyBDVVJMY29kZSBydG1wX2RvbmUoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBDVVJMY29kZSBzdGF0dXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgcHJlbWF0dXJlKQoreworICAodm9pZCljb25uOyAvKiB1bnVzZWQgKi8KKyAgKHZvaWQpc3RhdHVzOyAvKiB1bnVzZWQgKi8KKyAgKHZvaWQpcHJlbWF0dXJlOyAvKiB1bnVzZWQgKi8KKworICByZXR1cm4gQ1VSTEVfT0s7Cit9CisKK3N0YXRpYyBDVVJMY29kZSBydG1wX2Rpc2Nvbm5lY3Qoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uKQoreworICBSVE1QICpyID0gY29ubi0+cHJvdG8uZ2VuZXJpYzsKKyAgaWYgKHIpIHsKKyAgICBjb25uLT5wcm90by5nZW5lcmljID0gTlVMTDsKKyAgICBSVE1QX0Nsb3NlKHIpOworICAgIFJUTVBfRnJlZShyKTsKKyAgfQorICByZXR1cm4gQ1VSTEVfT0s7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHJ0bXBfcmVjdihzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGludCBzb2NraW5kZXgsIGNoYXIgKmJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbGVuLCBDVVJMY29kZSAqZXJyKQoreworICBSVE1QICpyID0gY29ubi0+cHJvdG8uZ2VuZXJpYzsKKyAgc3NpemVfdCBucmVhZDsKKworICAodm9pZClzb2NraW5kZXg7IC8qIHVudXNlZCAqLworCisgIG5yZWFkID0gUlRNUF9SZWFkKHIsIGJ1ZiwgbGVuKTsKKyAgaWYgKG5yZWFkIDwgMCkgeworICAgIGlmIChyLT5tX3JlYWQuc3RhdHVzID09IFJUTVBfUkVBRF9DT01QTEVURSB8fAorICAgICAgICByLT5tX3JlYWQuc3RhdHVzID09IFJUTVBfUkVBRF9FT0YpIHsKKyAgICAgIGNvbm4tPmRhdGEtPnJlcS5zaXplID0gY29ubi0+ZGF0YS0+cmVxLmJ5dGVjb3VudDsKKyAgICAgIG5yZWFkID0gMDsKKyAgICB9IGVsc2UKKyAgICAgICplcnIgPSBDVVJMRV9SRUNWX0VSUk9SOworICB9CisgIHJldHVybiBucmVhZDsKK30KKworc3RhdGljIHNzaXplX3QgcnRtcF9zZW5kKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgaW50IHNvY2tpbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICpidWYsIHNpemVfdCBsZW4sIENVUkxjb2RlICplcnIpCit7CisgIFJUTVAgKnIgPSBjb25uLT5wcm90by5nZW5lcmljOworICBzc2l6ZV90IG51bTsKKworICAodm9pZClzb2NraW5kZXg7IC8qIHVudXNlZCAqLworCisgIG51bSA9IFJUTVBfV3JpdGUociwgKGNoYXIgKilidWYsIGxlbik7CisgIGlmIChudW0gPCAwKSB7CisgICAgKmVyciA9IENVUkxFX1NFTkRfRVJST1I7CisgIH0KKyAgcmV0dXJuIG51bTsKK30KKyNlbmRpZiAgLyogVVNFX0xJQlJUTVAgKi8KZGlmZiAtLWdpdCBhL2xpYi9jdXJsX3J0bXAuaCBiL2xpYi9jdXJsX3J0bXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YTllOWU2Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2N1cmxfcnRtcC5oCkBAIC0wLDAgKzEsMzMgQEAKKyNpZm5kZWYgSEVBREVSX0NVUkxfUlRNUF9ICisjZGVmaW5lIEhFQURFUl9DVVJMX1JUTVBfSAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisgKgorICogQ29weXJpZ2h0IChDKSAyMDEwLCBIb3dhcmQgQ2h1LCA8aHljQGhpZ2hsYW5kc3VuLmNvbT4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyAqCisgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZkZWYgVVNFX0xJQlJUTVAKK2V4dGVybiBjb25zdCBzdHJ1Y3QgQ3VybF9oYW5kbGVyIEN1cmxfaGFuZGxlcl9ydG1wOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBDdXJsX2hhbmRsZXIgQ3VybF9oYW5kbGVyX3J0bXB0OworZXh0ZXJuIGNvbnN0IHN0cnVjdCBDdXJsX2hhbmRsZXIgQ3VybF9oYW5kbGVyX3J0bXBlOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBDdXJsX2hhbmRsZXIgQ3VybF9oYW5kbGVyX3J0bXB0ZTsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgQ3VybF9oYW5kbGVyIEN1cmxfaGFuZGxlcl9ydG1wczsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgQ3VybF9oYW5kbGVyIEN1cmxfaGFuZGxlcl9ydG1wdHM7CisjZW5kaWYKKworI2VuZGlmIC8qIEhFQURFUl9DVVJMX1JUTVBfSCAqLwpkaWZmIC0tZ2l0IGEvbGliL2N1cmxfc3NwaS5jIGIvbGliL2N1cmxfc3NwaS5jCmluZGV4IDZiMTliNDcuLmI5ODVkYmMgMTAwNjQ0Ci0tLSBhL2xpYi9jdXJsX3NzcGkuYworKysgYi9saWIvY3VybF9zc3BpLmMKQEAgLTM2LDYgKzM2LDkgQEAKICNpbmNsdWRlICJtZW1kZWJ1Zy5oIgogCiAKKy8qIFdlIHVzZSBvdXIgb3duIHR5cGVkZWYgaGVyZSBzaW5jZSBzb21lIGhlYWRlcnMgbWlnaHQgbGFjayB0aGVzZSAqLwordHlwZWRlZiBQU2VjdXJpdHlGdW5jdGlvblRhYmxlQSAoQVBJRU5UUlkgKklOSVRTRUNVUklUWUlOVEVSRkFDRV9GTl9BKShWT0lEKTsKKwogLyogSGFuZGxlIG9mIHNlY3VyaXR5LmRsbCBvciBzZWN1cjMyLmRsbCwgZGVwZW5kaW5nIG9uIFdpbmRvd3MgdmVyc2lvbiAqLwogSE1PRFVMRSBzX2hTZWNEbGwgPSBOVUxMOwogCkBAIC01OSw3ICs2Miw3IEBACiBDdXJsX3NzcGlfZ2xvYmFsX2luaXQodm9pZCkKIHsKICAgT1NWRVJTSU9OSU5GTyBvc3ZlcjsKLSAgSU5JVF9TRUNVUklUWV9JTlRFUkZBQ0VfQSBwSW5pdFNlY3VyaXR5SW50ZXJmYWNlOworICBJTklUU0VDVVJJVFlJTlRFUkZBQ0VfRk5fQSBwSW5pdFNlY3VyaXR5SW50ZXJmYWNlOwogCiAgIC8qIElmIHNlY3VyaXR5IGludGVyZmFjZSBpcyBub3QgeWV0IGluaXRpYWxpemVkIHRyeSB0byBkbyB0aGlzICovCiAgIGlmKHNfaFNlY0RsbCA9PSBOVUxMKSB7CkBAIC04NCw3ICs4Nyw3IEBACiAgICAgICByZXR1cm4gQ1VSTEVfRkFJTEVEX0lOSVQ7CiAKICAgICAvKiBHZXQgYWRkcmVzcyBvZiB0aGUgSW5pdFNlY3VyaXR5SW50ZXJmYWNlQSBmdW5jdGlvbiBmcm9tIHRoZSBTU1BJIGRsbCAqLwotICAgIHBJbml0U2VjdXJpdHlJbnRlcmZhY2UgPSAoSU5JVF9TRUNVUklUWV9JTlRFUkZBQ0VfQSkKKyAgICBwSW5pdFNlY3VyaXR5SW50ZXJmYWNlID0gKElOSVRTRUNVUklUWUlOVEVSRkFDRV9GTl9BKQogICAgICAgR2V0UHJvY0FkZHJlc3Moc19oU2VjRGxsLCAiSW5pdFNlY3VyaXR5SW50ZXJmYWNlQSIpOwogICAgIGlmKCEgcEluaXRTZWN1cml0eUludGVyZmFjZSkKICAgICAgIHJldHVybiBDVVJMRV9GQUlMRURfSU5JVDsKZGlmZiAtLWdpdCBhL2xpYi9kaWN0LmMgYi9saWIvZGljdC5jCmluZGV4IDFkZWFiNzYuLmQ4NjkyM2EgMTAwNjQ0Ci0tLSBhL2xpYi9kaWN0LmMKKysrIGIvbGliL2RpY3QuYwpAQCAtNSw3ICs1LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDA5LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpAQCAtMjE3LDEzICsyMTcsMTIgQEAKIAogICAgIGZyZWUoZXdvcmQpOwogCi0gICAgaWYocmVzdWx0KQorICAgIGlmKHJlc3VsdCkgewogICAgICAgZmFpbGYoZGF0YSwgIkZhaWxlZCBzZW5kaW5nIERJQ1QgcmVxdWVzdCIpOwotICAgIGVsc2UKLSAgICAgIHJlc3VsdCA9IEN1cmxfc2V0dXBfdHJhbnNmZXIoY29ubiwgRklSU1RTT0NLRVQsIC0xLCBGQUxTRSwgYnl0ZWNvdW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMSwgTlVMTCk7IC8qIG5vIHVwbG9hZCAqLwotICAgIGlmKHJlc3VsdCkKICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIEN1cmxfc2V0dXBfdHJhbnNmZXIoY29ubiwgRklSU1RTT0NLRVQsIC0xLCBGQUxTRSwgYnl0ZWNvdW50LAorICAgICAgICAgICAgICAgICAgICAgICAgLTEsIE5VTEwpOyAvKiBubyB1cGxvYWQgKi8KICAgfQogICBlbHNlIGlmKEN1cmxfcmF3X25lcXVhbChwYXRoLCBESUNUX0RFRklORSwgc2l6ZW9mKERJQ1RfREVGSU5FKS0xKSB8fAogICAgICAgICAgICBDdXJsX3Jhd19uZXF1YWwocGF0aCwgRElDVF9ERUZJTkUyLCBzaXplb2YoRElDVF9ERUZJTkUyKS0xKSB8fApAQCAtMjY1LDE1ICsyNjQsMTIgQEAKIAogICAgIGZyZWUoZXdvcmQpOwogCi0gICAgaWYocmVzdWx0KQorICAgIGlmKHJlc3VsdCkgewogICAgICAgZmFpbGYoZGF0YSwgIkZhaWxlZCBzZW5kaW5nIERJQ1QgcmVxdWVzdCIpOwotICAgIGVsc2UKLSAgICAgIHJlc3VsdCA9IEN1cmxfc2V0dXBfdHJhbnNmZXIoY29ubiwgRklSU1RTT0NLRVQsIC0xLCBGQUxTRSwgYnl0ZWNvdW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMSwgTlVMTCk7IC8qIG5vIHVwbG9hZCAqLwotCi0gICAgaWYocmVzdWx0KQogICAgICAgcmV0dXJuIHJlc3VsdDsKLQorICAgIH0KKyAgICBDdXJsX3NldHVwX3RyYW5zZmVyKGNvbm4sIEZJUlNUU09DS0VULCAtMSwgRkFMU0UsIGJ5dGVjb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgIC0xLCBOVUxMKTsgLyogbm8gdXBsb2FkICovCiAgIH0KICAgZWxzZSB7CiAKQEAgLTI5MCwxMyArMjg2LDEyIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICJDTElFTlQgIiBMSUJDVVJMX05BTUUgIiAiIExJQkNVUkxfVkVSU0lPTiAiXHJcbiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIiVzXHJcbiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIlFVSVRcclxuIiwgcHBhdGgpOwotICAgICAgaWYocmVzdWx0KQorICAgICAgaWYocmVzdWx0KSB7CiAgICAgICAgIGZhaWxmKGRhdGEsICJGYWlsZWQgc2VuZGluZyBESUNUIHJlcXVlc3QiKTsKLSAgICAgIGVsc2UKLSAgICAgICAgcmVzdWx0ID0gQ3VybF9zZXR1cF90cmFuc2Zlcihjb25uLCBGSVJTVFNPQ0tFVCwgLTEsIEZBTFNFLCBieXRlY291bnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEsIE5VTEwpOwotICAgICAgaWYocmVzdWx0KQogICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgfQorCisgICAgICBDdXJsX3NldHVwX3RyYW5zZmVyKGNvbm4sIEZJUlNUU09DS0VULCAtMSwgRkFMU0UsIGJ5dGVjb3VudCwgLTEsIE5VTEwpOwogICAgIH0KICAgfQogCmRpZmYgLS1naXQgYS9saWIvZWFzeS5jIGIvbGliL2Vhc3kuYwppbmRleCAzNWZiMDE4Li4xZjgzOWZlIDEwMDY0NAotLS0gYS9saWIvZWFzeS5jCisrKyBiL2xpYi9lYXN5LmMKQEAgLTI4Nyw2ICsyODcsMTMgQEAKICAgfQogI2VuZGlmCiAKKyNpZiBkZWZpbmVkKFVTRV9MSUJTU0gyKSAmJiBkZWZpbmVkKEhBVkVfTElCU1NIMl9JTklUKQorICBpZihsaWJzc2gyX2luaXQoMCkpIHsKKyAgICBERUJVR0YoZnByaW50ZihzdGRlcnIsICJFcnJvcjogbGlic3NoMl9pbml0IGZhaWxlZFxuIikpOworICAgIHJldHVybiBDVVJMRV9GQUlMRURfSU5JVDsKKyAgfQorI2VuZGlmCisKICAgaW5pdF9mbGFncyAgPSBmbGFnczsKIAogICAvKiBQcmVzZXQgcHNldWRvLXJhbmRvbSBudW1iZXIgc2VxdWVuY2UuICovCkBAIC0zNTUsNiArMzYyLDEwIEBACiAgIGFtaWdhX2NsZWFudXAoKTsKICNlbmRpZgogCisjaWYgZGVmaW5lZChVU0VfTElCU1NIMikgJiYgZGVmaW5lZChIQVZFX0xJQlNTSDJfRVhJVCkKKyAgKHZvaWQpbGlic3NoMl9leGl0KCk7CisjZW5kaWYKKwogICBpbml0X2ZsYWdzICA9IDA7CiB9CiAKQEAgLTY4OSw4ICs3MDAsOSBAQAogICAgIH0KIAogI2lmZGVmIFVTRV9BUkVTCi0gICAgLyogSWYgd2UgdXNlIGFyZXMsIHdlIHNldHVwIGEgbmV3IGFyZXMgY2hhbm5lbCBmb3IgdGhlIG5ldyBoYW5kbGUgKi8KLSAgICBpZihBUkVTX1NVQ0NFU1MgIT0gYXJlc19pbml0KCZvdXRjdXJsLT5zdGF0ZS5hcmVzY2hhbm5lbCkpCisgICAgLyogSWYgd2UgdXNlIGFyZXMsIHdlIGNsb25lIHRoZSBhcmVzIGNoYW5uZWwgZm9yIHRoZSBuZXcgaGFuZGxlICovCisgICAgaWYoQVJFU19TVUNDRVNTICE9IGFyZXNfZHVwKCZvdXRjdXJsLT5zdGF0ZS5hcmVzY2hhbm5lbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS0+c3RhdGUuYXJlc2NoYW5uZWwpKQogICAgICAgYnJlYWs7CiAjZW5kaWYKIApAQCAtMTA2MSw5ICsxMDczLDYgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VybF9zb2NrZXRfdCAqc2ZkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29ubmVjdGRhdGEgKipjb25ucCkKIHsKLSAgQ1VSTGNvZGUgcmV0OwotICBsb25nIHNvY2tmZDsKLQogICBpZihkYXRhID09IE5VTEwpCiAgICAgcmV0dXJuIENVUkxFX0JBRF9GVU5DVElPTl9BUkdVTUVOVDsKIApAQCAtMTA3MywxOCArMTA4MiwxMyBAQAogICAgIHJldHVybiBDVVJMRV9VTlNVUFBPUlRFRF9QUk9UT0NPTDsKICAgfQogCi0gIHJldCA9IEN1cmxfZ2V0Y29ubmVjdGluZm8oZGF0YSwgJnNvY2tmZCwgY29ubnApOwotICBpZihyZXQgIT0gQ1VSTEVfT0spCi0gICAgcmV0dXJuIHJldDsKKyAgKnNmZCA9IEN1cmxfZ2V0Y29ubmVjdGluZm8oZGF0YSwgY29ubnApOwogCi0gIGlmKHNvY2tmZCA9PSAtMSkgeworICBpZigqc2ZkID09IENVUkxfU09DS0VUX0JBRCkgewogICAgIGZhaWxmKGRhdGEsICJGYWlsZWQgdG8gZ2V0IHJlY2VudCBzb2NrZXQiKTsKICAgICByZXR1cm4gQ1VSTEVfVU5TVVBQT1JURURfUFJPVE9DT0w7CiAgIH0KIAotICAqc2ZkID0gKGN1cmxfc29ja2V0X3Qpc29ja2ZkOyAvKiB3ZSBrbm93IHRoYXQgdGhpcyBpcyBhY3R1YWxseSBhIHNvY2tldAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdG9yIHNvIHRoZSB0eXBlY2FzdCBpcyBmaW5lIGhlcmUgKi8KLQogICByZXR1cm4gQ1VSTEVfT0s7CiB9CiAKQEAgLTEwOTcsNyArMTEwMSw2IEBACiB7CiAgIGN1cmxfc29ja2V0X3Qgc2ZkOwogICBDVVJMY29kZSByZXQ7Ci0gIGludCByZXQxOwogICBzc2l6ZV90IG4xOwogICBzdHJ1Y3QgY29ubmVjdGRhdGEgKmM7CiAgIHN0cnVjdCBTZXNzaW9uSGFuZGxlICpkYXRhID0gKHN0cnVjdCBTZXNzaW9uSGFuZGxlICopY3VybDsKQEAgLTExMDcsMTMgKzExMTAsMTAgQEAKICAgICByZXR1cm4gcmV0OwogCiAgICpuID0gMDsKLSAgcmV0MSA9IEN1cmxfcmVhZChjLCBzZmQsIGJ1ZmZlciwgYnVmbGVuLCAmbjEpOworICByZXQgPSBDdXJsX3JlYWQoYywgc2ZkLCBidWZmZXIsIGJ1ZmxlbiwgJm4xKTsKIAotICBpZihyZXQxID09IC0xKQotICAgIHJldHVybiBDVVJMRV9BR0FJTjsKLQotICBpZihyZXQxICE9IENVUkxFX09LKQotICAgIHJldHVybiAoQ1VSTGNvZGUpcmV0MTsKKyAgaWYocmV0ICE9IENVUkxFX09LKQorICAgIHJldHVybiByZXQ7CiAKICAgKm4gPSAoc2l6ZV90KW4xOwogCmRpZmYgLS1naXQgYS9saWIvZXNjYXBlLmMgYi9saWIvZXNjYXBlLmMKaW5kZXggMzdkMjFlNy4uNzM1ZTFkOCAxMDA2NDQKLS0tIGEvbGliL2VzY2FwZS5jCisrKyBiL2xpYi9lc2NhcGUuYwpAQCAtNDMsOCArNDMsMTAgQEAKICNpbmNsdWRlICJtZW1kZWJ1Zy5oIgogCiAvKiBQb3J0YWJsZSBjaGFyYWN0ZXIgY2hlY2sgKHJlbWVtYmVyIEVCQ0RJQykuIERvIG5vdCB1c2UgaXNhbG51bSgpIGJlY2F1c2UKLWl0cyBiZWhhdmlvciBpcyBhbHRlcmVkIGJ5IHRoZSBjdXJyZW50IGxvY2FsZS4gKi8KLXN0YXRpYyBib29sIEN1cmxfaXNhbG51bSh1bnNpZ25lZCBjaGFyIGluKQorICAgaXRzIGJlaGF2aW9yIGlzIGFsdGVyZWQgYnkgdGhlIGN1cnJlbnQgbG9jYWxlLgorICAgU2VlIGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzM5ODYjc2VjdGlvbi0yLjMKKyovCitzdGF0aWMgYm9vbCBDdXJsX2lzdW5yZXNlcnZlZCh1bnNpZ25lZCBjaGFyIGluKQogewogICBzd2l0Y2ggKGluKSB7CiAgICAgY2FzZSAnMCc6IGNhc2UgJzEnOiBjYXNlICcyJzogY2FzZSAnMyc6IGNhc2UgJzQnOgpAQCAtNTksNiArNjEsNyBAQAogICAgIGNhc2UgJ0snOiBjYXNlICdMJzogY2FzZSAnTSc6IGNhc2UgJ04nOiBjYXNlICdPJzoKICAgICBjYXNlICdQJzogY2FzZSAnUSc6IGNhc2UgJ1InOiBjYXNlICdTJzogY2FzZSAnVCc6CiAgICAgY2FzZSAnVSc6IGNhc2UgJ1YnOiBjYXNlICdXJzogY2FzZSAnWCc6IGNhc2UgJ1knOiBjYXNlICdaJzoKKyAgICBjYXNlICctJzogY2FzZSAnLic6IGNhc2UgJ18nOiBjYXNlICd+JzoKICAgICAgIHJldHVybiBUUlVFOwogICAgIGRlZmF1bHQ6CiAgICAgICBicmVhazsKQEAgLTEwMCw3ICsxMDMsNyBAQAogICB3aGlsZShsZW5ndGgtLSkgewogICAgIGluID0gKnN0cmluZzsKIAotICAgIGlmIChDdXJsX2lzYWxudW0oaW4pKSB7CisgICAgaWYgKEN1cmxfaXN1bnJlc2VydmVkKGluKSkgewogICAgICAgLyoganVzdCBjb3B5IHRoaXMgKi8KICAgICAgIG5zW3N0cmluZGV4KytdPWluOwogICAgIH0KZGlmZiAtLWdpdCBhL2xpYi9maWxlLmMgYi9saWIvZmlsZS5jCmluZGV4IDZjMTRlZTguLjkxMTc2YWEgMTAwNjQ0Ci0tLSBhL2xpYi9maWxlLmMKKysrIGIvbGliL2ZpbGUuYwpAQCAtNSw3ICs1LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDA5LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpAQCAtMTQ2LDcgKzE0Niw3IEBACiAKICAgaWYoZGF0YS0+c3RhdGUudXNlX3JhbmdlICYmIGRhdGEtPnN0YXRlLnJhbmdlKSB7CiAgICAgZnJvbT1jdXJseF9zdHJ0b29mZnQoZGF0YS0+c3RhdGUucmFuZ2UsICZwdHIsIDApOwotICAgIHdoaWxlKHB0ciAmJiAqcHRyICYmIChpc3NwYWNlKChpbnQpKnB0cikgfHwgKCpwdHI9PSctJykpKQorICAgIHdoaWxlKCpwdHIgJiYgKGlzc3BhY2UoKGludCkqcHRyKSB8fCAoKnB0cj09Jy0nKSkpCiAgICAgICBwdHIrKzsKICAgICB0bz1jdXJseF9zdHJ0b29mZnQocHRyLCAmcHRyMiwgMCk7CiAgICAgaWYocHRyID09IHB0cjIpIHsKQEAgLTE2MSwxMSArMTYxLDEwIEBACiAgICAgfQogICAgIGVsc2UgaWYoZnJvbSA8IDApIHsKICAgICAgIC8qIC1ZICovCi0gICAgICB0b3RhbHNpemUgPSAtZnJvbTsKICAgICAgIGRhdGEtPnJlcS5tYXhkb3dubG9hZCA9IC1mcm9tOwogICAgICAgZGF0YS0+c3RhdGUucmVzdW1lX2Zyb20gPSBmcm9tOwogICAgICAgREVCVUdGKGluZm9mKGRhdGEsICJSQU5HRSB0aGUgbGFzdCAlIiBGT1JNQVRfT0ZGX1QgIiBieXRlc1xuIiwKLSAgICAgICAgICAgICAgICAgICB0b3RhbHNpemUpKTsKKyAgICAgICAgICAgICAgICAgICAtZnJvbSkpOwogICAgIH0KICAgICBlbHNlIHsKICAgICAgIC8qIFgtWSAqLwpkaWZmIC0tZ2l0IGEvbGliL2ZpbGVpbmZvLmMgYi9saWIvZmlsZWluZm8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNWRiZmNlCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2ZpbGVpbmZvLmMKQEAgLTAsMCArMSw3NSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisgKgorICogQ29weXJpZ2h0IChDKSAyMDEwLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgInNldHVwLmgiCisKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlICJzdHJkdXAuaCIKKyNpbmNsdWRlICJmaWxlaW5mby5oIgorCisjZGVmaW5lIF9NUFJJTlRGX1JFUExBQ0UgLyogdXNlIG91ciBmdW5jdGlvbnMgb25seSAqLworI2luY2x1ZGUgPGN1cmwvbXByaW50Zi5oPgorCisjaW5jbHVkZSAiY3VybF9tZW1vcnkuaCIKKy8qIFRoZSBsYXN0ICNpbmNsdWRlIGZpbGUgc2hvdWxkIGJlOiAqLworI2luY2x1ZGUgIm1lbWRlYnVnLmgiCisKK3N0cnVjdCBjdXJsX2ZpbGVpbmZvICpDdXJsX2ZpbGVpbmZvX2FsbG9jKHZvaWQpCit7CisgIHN0cnVjdCBjdXJsX2ZpbGVpbmZvICp0bXAgPSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBjdXJsX2ZpbGVpbmZvKSk7CisgIGlmKCF0bXApCisgICAgcmV0dXJuIE5VTEw7CisgIG1lbXNldCh0bXAsIDAsIHNpemVvZihzdHJ1Y3QgY3VybF9maWxlaW5mbykpOworICByZXR1cm4gdG1wOworfQorCit2b2lkIEN1cmxfZmlsZWluZm9fZHRvcih2b2lkICp1c2VyLCB2b2lkICplbGVtZW50KQoreworICBzdHJ1Y3QgY3VybF9maWxlaW5mbyAqZmluZm8gPSBlbGVtZW50OworICAodm9pZCkgdXNlcjsKKyAgaWYoIWZpbmZvKQorICAgIHJldHVybjsKKworICBpZihmaW5mby0+Yl9kYXRhKXsKKyAgICBmcmVlKGZpbmZvLT5iX2RhdGEpOworICB9CisKKyAgZnJlZShmaW5mbyk7Cit9CisKK3N0cnVjdCBjdXJsX2ZpbGVpbmZvICpDdXJsX2ZpbGVpbmZvX2R1cChjb25zdCBzdHJ1Y3QgY3VybF9maWxlaW5mbyAqc3JjKQoreworICBzdHJ1Y3QgY3VybF9maWxlaW5mbyAqcHRyID0gbWFsbG9jKHNpemVvZihzdHJ1Y3QgY3VybF9maWxlaW5mbykpOworICBpZighcHRyKQorICAgIHJldHVybiBOVUxMOworICAqcHRyID0gKnNyYzsKKworICBwdHItPmJfZGF0YSA9IG1hbGxvYyhzcmMtPmJfc2l6ZSk7CisgIGlmKCFwdHItPmJfZGF0YSkgeworICAgIGZyZWUocHRyKTsKKyAgICByZXR1cm4gTlVMTDsKKyAgfQorICBlbHNlIHsKKyAgICBtZW1jcHkocHRyLT5iX2RhdGEsIHNyYy0+Yl9kYXRhLCBzcmMtPmJfc2l6ZSk7CisgICAgcmV0dXJuIHB0cjsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvbGliL2ZpbGVpbmZvLmggYi9saWIvZmlsZWluZm8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMGU1ZTU5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2ZpbGVpbmZvLmgKQEAgLTAsMCArMSwzMyBAQAorI2lmbmRlZiBIRUFERVJfQ1VSTF9GSUxFSU5GT19ICisjZGVmaW5lIEhFQURFUl9DVVJMX0ZJTEVJTkZPX0gKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyAqCisgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlIDxjdXJsL2N1cmwuaD4KKworc3RydWN0IGN1cmxfZmlsZWluZm8gKkN1cmxfZmlsZWluZm9fYWxsb2Modm9pZCk7CisKK3ZvaWQgQ3VybF9maWxlaW5mb19kdG9yKHZvaWQgKiwgdm9pZCAqKTsKKworc3RydWN0IGN1cmxfZmlsZWluZm8gKkN1cmxfZmlsZWluZm9fZHVwKGNvbnN0IHN0cnVjdCBjdXJsX2ZpbGVpbmZvICpzcmMpOworCisjZW5kaWYgLyogSEVBREVSX0NVUkxfRklMRUlORk9fSCAqLwpkaWZmIC0tZ2l0IGEvbGliL2ZpcmVmb3gtZGIycGVtLnNoIGIvbGliL2ZpcmVmb3gtZGIycGVtLnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0YWM1NzYKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZmlyZWZveC1kYjJwZW0uc2gKQEAgLTAsMCArMSw1NCBAQAorIyEvYmluL3NoCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyMgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorIyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisjICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyMgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyMgKgorIyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisjICoKKyMgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorIyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyMgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorIyAqCisjICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisjICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisjICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyMgKgorIyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyMgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyAqCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyBUaGlzIHNoZWxsIHNjcmlwdCBjcmVhdGVzIGEgZnJlc2ggY2EtYnVuZGxlLmNydCBmaWxlIGZvciB1c2Ugd2l0aCBsaWJjdXJsLgorIyBJdCBleHRyYWN0cyBhbGwgY2EgY2VydHMgaXQgZmluZHMgaW4gdGhlIGxvY2FsIEZpcmVmb3ggZGF0YWJhc2UgYW5kIGNvbnZlcnRzCisjIHRoZW0gYWxsIGludG8gUEVNIGZvcm1hdC4KKyMKK2RiPWBscyAtMWQgJEhPTUUvLm1vemlsbGEvZmlyZWZveC8qZGVmYXVsdGAKK291dD0kMQorCitpZiB0ZXN0IC16ICIkb3V0IjsgdGhlbgorICBvdXQ9ImNhLWJ1bmRsZS5jcnQiICMgdXNlIGEgc2Vuc2libGUgZGVmYXVsdAorZmkKKworY3VycmVudGRhdGU9YGRhdGVgCisKK2NhdCA+JG91dCA8PEVPRgorIyMKKyMjIEJ1bmRsZSBvZiBDQSBSb290IENlcnRpZmljYXRlcworIyMKKyMjIENvbnZlcnRlZCBhdDogJHtjdXJyZW50ZGF0ZX0KKyMjIFRoZXNlIHdlcmUgY29udmVydGVkIGZyb20gdGhlIGxvY2FsIEZpcmVmb3ggZGlyZWN0b3J5IGJ5IHRoZSBkYjJwZW0gc2NyaXB0LgorIyMKK0VPRgorCisKK2NlcnR1dGlsIC1MIC1oICdCdWlsdGluIE9iamVjdCBUb2tlbicgLWQgJGRiIHwgXAorZ3JlcCAnICpbQ2NHVFBwdV0qLFtDY0dUUHB1XSosW0NjR1RQcHVdKiAqJCcgfCBcCitzZWQgLWUgJ3MvICpbQ2NHVFBwdV0qLFtDY0dUUHB1XSosW0NjR1RQcHVdKiAqJC8vJyAtZSAncy9cKC4qXCkvIlwxIi8nIHwgXAorc29ydCB8IFwKK3doaWxlIHJlYWQgbmlja25hbWU7IFwKKyBkbyBlY2hvICRuaWNrbmFtZSB8IHNlZCAtZSAicy9CdWlsdGluIE9iamVjdCBUb2tlbjovL2ciOyBcCitldmFsIGNlcnR1dGlsIC1kICRkYiAtTCAtbiAiJG5pY2tuYW1lIiAtYSA7IFwKK2RvbmUgPj4gJG91dAorCmRpZmYgLS1naXQgYS9saWIvZnRwLmMgYi9saWIvZnRwLmMKaW5kZXggZjgyMWQxMi4uNjBkOTUxNyAxMDA2NDQKLS0tIGEvbGliL2Z0cC5jCisrKyBiL2xpYi9mdHAuYwpAQCAtNzEsNiArNzEsOCBAQAogI2luY2x1ZGUgImh0dHAuaCIgLyogZm9yIEhUVFAgcHJveHkgdHVubmVsIHN0dWZmICovCiAjaW5jbHVkZSAic29ja3MuaCIKICNpbmNsdWRlICJmdHAuaCIKKyNpbmNsdWRlICJmaWxlaW5mby5oIgorI2luY2x1ZGUgImZ0cGxpc3RwYXJzZXIuaCIKIAogI2lmIGRlZmluZWQoSEFWRV9LUkI0KSB8fCBkZWZpbmVkKEhBVkVfR1NTQVBJKQogI2luY2x1ZGUgImtyYjQuaCIKQEAgLTE0NCw2ICsxNDYsMTQgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCAqZG9waGFzZV9kb25lKTsKIHN0YXRpYyBDVVJMY29kZSBmdHBfc2V0dXBfY29ubmVjdGlvbihzdHJ1Y3QgY29ubmVjdGRhdGEgKiBjb25uKTsKIAorc3RhdGljIENVUkxjb2RlIGluaXRfd2NfZGF0YShzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pOworc3RhdGljIENVUkxjb2RlIHdjX3N0YXRlbWFjaChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pOworCitzdGF0aWMgdm9pZCB3Y19kYXRhX2R0b3Iodm9pZCAqcHRyKTsKKworc3RhdGljIENVUkxjb2RlIGZ0cF9zdGF0ZV9wb3N0X3JldHJfc2l6ZShzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cmxfb2ZmX3QgZmlsZXNpemUpOworCiAvKiBlYXN5LXRvLXVzZSBtYWNybzogKi8KICNkZWZpbmUgRlRQU0VOREYoeCx5LHopICAgIGlmKChyZXN1bHQgPSBDdXJsX2Z0cHNlbmRmKHgseSx6KSkgIT0gQ1VSTEVfT0spIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQKQEAgLTMxNCw3ICszMjQsNyBAQAogICBmb3IoOzspIHsKICAgICB0aW1lb3V0X21zID0gQ3VybF90aW1lbGVmdChjb25uLCBOVUxMLCBUUlVFKTsKIAotICAgIGlmKHRpbWVvdXRfbXMgPD0gMCkgeworICAgIGlmKHRpbWVvdXRfbXMgPCAwKSB7CiAgICAgICAvKiBpZiBhIHRpbWVvdXQgd2FzIGFscmVhZHkgcmVhY2hlZCwgYmFpbCBvdXQgKi8KICAgICAgIGZhaWxmKGRhdGEsICJUaW1lb3V0IHdoaWxlIHdhaXRpbmcgZm9yIHNlcnZlciBjb25uZWN0Iik7CiAgICAgICByZXR1cm4gQ1VSTEVfT1BFUkFUSU9OX1RJTUVET1VUOwpAQCAtODIwLDcgKzgzMCw3IEBACiAgIC8qIHJlc29sdiBpcC9ob3N0IHRvIGlwICovCiAgIHJjID0gQ3VybF9yZXNvbHYoY29ubiwgaG9zdCwgMCwgJmgpOwogICBpZihyYyA9PSBDVVJMUkVTT0xWX1BFTkRJTkcpCi0gICAgcmMgPSBDdXJsX3dhaXRfZm9yX3Jlc29sdihjb25uLCAmaCk7CisgICAgKHZvaWQpQ3VybF93YWl0X2Zvcl9yZXNvbHYoY29ubiwgJmgpOwogICBpZihoKSB7CiAgICAgcmVzID0gaC0+YWRkcjsKICAgICAvKiB3aGVuIHdlIHJldHVybiBmcm9tIHRoaXMgZnVuY3Rpb24sIHdlIGNhbiBmb3JnZXQgYWJvdXQgdGhpcyBlbnRyeQpAQCAtMTM3OCw3ICsxMzg4LDcgQEAKICAgICAgICAgaW5mb2YoZGF0YSwgIkZpbGUgYWxyZWFkeSBjb21wbGV0ZWx5IHVwbG9hZGVkXG4iKTsKIAogICAgICAgICAvKiBubyBkYXRhIHRvIHRyYW5zZmVyICovCi0gICAgICAgIHJlc3VsdD1DdXJsX3NldHVwX3RyYW5zZmVyKGNvbm4sIC0xLCAtMSwgRkFMU0UsIE5VTEwsIC0xLCBOVUxMKTsKKyAgICAgICAgQ3VybF9zZXR1cF90cmFuc2Zlcihjb25uLCAtMSwgLTEsIEZBTFNFLCBOVUxMLCAtMSwgTlVMTCk7CiAKICAgICAgICAgLyogU2V0IC0+dHJhbnNmZXIgc28gdGhhdCB3ZSB3b24ndCBnZXQgYW55IGVycm9yIGluCiAgICAgICAgICAqIGZ0cF9kb25lKCkgYmVjYXVzZSB3ZSBkaWRuJ3QgdHJhbnNmZXIgYW55dGhpbmchICovCkBAIC0xNDY5LDggKzE0NzksMTQgQEAKICAgICAgIGlmKGZ0cC0+dHJhbnNmZXIgIT0gRlRQVFJBTlNGRVJfQk9EWSkKICAgICAgICAgc3RhdGUoY29ubiwgRlRQX1NUT1ApOwogICAgICAgZWxzZSB7Ci0gICAgICAgIFBQU0VOREYoJmZ0cGMtPnBwLCAiU0laRSAlcyIsIGZ0cGMtPmZpbGUpOwotICAgICAgICBzdGF0ZShjb25uLCBGVFBfUkVUUl9TSVpFKTsKKyAgICAgICAgaWYoZnRwYy0+a25vd25fZmlsZXNpemUgIT0gLTEpIHsKKyAgICAgICAgICBDdXJsX3BncnNTZXREb3dubG9hZFNpemUoZGF0YSwgZnRwYy0+a25vd25fZmlsZXNpemUpOworICAgICAgICAgIHJlc3VsdCA9IGZ0cF9zdGF0ZV9wb3N0X3JldHJfc2l6ZShjb25uLCBmdHBjLT5rbm93bl9maWxlc2l6ZSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgUFBTRU5ERigmZnRwYy0+cHAsICJTSVpFICVzIiwgZnRwYy0+ZmlsZSk7CisgICAgICAgICAgc3RhdGUoY29ubiwgRlRQX1JFVFJfU0laRSk7CisgICAgICAgIH0KICAgICAgIH0KICAgICAgIGJyZWFrOwogICAgIGNhc2UgRlRQX1NUT1JfUFJFUVVPVEU6CkBAIC0xNjMwLDggKzE2NDYsOSBAQAogICAgICAqLwogICAgIHJjID0gQ3VybF9yZXNvbHYoY29ubiwgY29ubi0+cHJveHkubmFtZSwgKGludCljb25uLT5wb3J0LCAmYWRkcik7CiAgICAgaWYocmMgPT0gQ1VSTFJFU09MVl9QRU5ESU5HKQotICAgICAgLyogQkxPQ0tJTkcgKi8KLSAgICAgIHJjID0gQ3VybF93YWl0X2Zvcl9yZXNvbHYoY29ubiwgJmFkZHIpOworICAgICAgLyogQkxPQ0tJTkcsIGlnbm9yZXMgdGhlIHJldHVybiBjb2RlIGJ1dCAnYWRkcicgd2lsbCBiZSBOVUxMIGluCisgICAgICAgICBjYXNlIG9mIGZhaWx1cmUgKi8KKyAgICAgICh2b2lkKUN1cmxfd2FpdF9mb3JfcmVzb2x2KGNvbm4sICZhZGRyKTsKIAogICAgIGNvbm5lY3Rwb3J0ID0KICAgICAgICh1bnNpZ25lZCBzaG9ydCljb25uLT5wb3J0OyAvKiB3ZSBjb25uZWN0IHRvIHRoZSBwcm94eSdzIHBvcnQgKi8KQEAgLTE2NDcsNyArMTY2NCw3IEBACiAgICAgcmMgPSBDdXJsX3Jlc29sdihjb25uLCBuZXdob3N0LCBuZXdwb3J0LCAmYWRkcik7CiAgICAgaWYocmMgPT0gQ1VSTFJFU09MVl9QRU5ESU5HKQogICAgICAgLyogQkxPQ0tJTkcgKi8KLSAgICAgIHJjID0gQ3VybF93YWl0X2Zvcl9yZXNvbHYoY29ubiwgJmFkZHIpOworICAgICAgKHZvaWQpQ3VybF93YWl0X2Zvcl9yZXNvbHYoY29ubiwgJmFkZHIpOwogCiAgICAgY29ubmVjdHBvcnQgPSBuZXdwb3J0OyAvKiB3ZSBjb25uZWN0IHRvIHRoZSByZW1vdGUgcG9ydCAqLwogCkBAIC0xOTczLDcgKzE5OTAsNyBAQAogCiAgICAgaWYoZnRwLT5kb3dubG9hZHNpemUgPT0gMCkgewogICAgICAgLyogbm8gZGF0YSB0byB0cmFuc2ZlciAqLwotICAgICAgcmVzdWx0ID0gQ3VybF9zZXR1cF90cmFuc2Zlcihjb25uLCAtMSwgLTEsIEZBTFNFLCBOVUxMLCAtMSwgTlVMTCk7CisgICAgICBDdXJsX3NldHVwX3RyYW5zZmVyKGNvbm4sIC0xLCAtMSwgRkFMU0UsIE5VTEwsIC0xLCBOVUxMKTsKICAgICAgIGluZm9mKGRhdGEsICJGaWxlIGFscmVhZHkgY29tcGxldGVseSBkb3dubG9hZGVkXG4iKTsKIAogICAgICAgLyogU2V0IC0+dHJhbnNmZXIgc28gdGhhdCB3ZSB3b24ndCBnZXQgYW55IGVycm9yIGluIGZ0cF9kb25lKCkKQEAgLTIxMTUsOCArMjEzMiw4IEBACiAgIC8qIHNldCB0aGUgU09fU05EQlVGIGZvciB0aGUgc2Vjb25kYXJ5IHNvY2tldCBmb3IgdGhvc2Ugd2hvIG5lZWQgaXQgKi8KICAgQ3VybF9zbmRidWZzZXQoY29ubi0+c29ja1tTRUNPTkRBUllTT0NLRVRdKTsKIAotICByZXN1bHQgPSBDdXJsX3NldHVwX3RyYW5zZmVyKGNvbm4sIC0xLCAtMSwgRkFMU0UsIE5VTEwsIC8qIG5vIGRvd25sb2FkICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0VDT05EQVJZU09DS0VULCBmdHAtPmJ5dGVjb3VudHApOworICBDdXJsX3NldHVwX3RyYW5zZmVyKGNvbm4sIC0xLCAtMSwgRkFMU0UsIE5VTEwsIC8qIG5vIGRvd25sb2FkICovCisgICAgICAgICAgICAgICAgICAgICAgU0VDT05EQVJZU09DS0VULCBmdHAtPmJ5dGVjb3VudHApOwogICBzdGF0ZShjb25uLCBGVFBfU1RPUCk7CiAKICAgY29ubi0+cHJvdG8uZnRwYy5wcC5wZW5kaW5nX3Jlc3AgPSBUUlVFOyAvKiBleHBlY3QgYSBzZXJ2ZXIgcmVzcG9uc2UgKi8KQEAgLTIyMjksMTEgKzIyNDYsOCBAQAogICAgICAgaW5mb2YoZGF0YSwgIkdldHRpbmcgZmlsZSB3aXRoIHNpemU6ICUiIEZPUk1BVF9PRkZfVCAiXG4iLCBzaXplKTsKIAogICAgIC8qIEZUUCBkb3dubG9hZDogKi8KLSAgICByZXN1bHQ9Q3VybF9zZXR1cF90cmFuc2Zlcihjb25uLCBTRUNPTkRBUllTT0NLRVQsIHNpemUsIEZBTFNFLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ0cC0+Ynl0ZWNvdW50cCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMSwgTlVMTCk7IC8qIG5vIHVwbG9hZCBoZXJlICovCi0gICAgaWYocmVzdWx0KQotICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICBDdXJsX3NldHVwX3RyYW5zZmVyKGNvbm4sIFNFQ09OREFSWVNPQ0tFVCwgc2l6ZSwgRkFMU0UsCisgICAgICAgICAgICAgICAgICAgICAgICBmdHAtPmJ5dGVjb3VudHAsIC0xLCBOVUxMKTsgLyogbm8gdXBsb2FkIGhlcmUgKi8KIAogICAgIGNvbm4tPnByb3RvLmZ0cGMucHAucGVuZGluZ19yZXNwID0gVFJVRTsgLyogZXhwZWN0IHNlcnZlciByZXNwb25zZSAqLwogICAgIHN0YXRlKGNvbm4sIEZUUF9TVE9QKTsKQEAgLTI0MTAsNyArMjQyNCw3IEBACiAgICAgICAgICAgIHNldCBhIHZhbGlkIGxldmVsICovCiAgICAgICAgIEN1cmxfc2VjX3JlcXVlc3RfcHJvdChjb25uLCBkYXRhLT5zZXQuc3RyW1NUUklOR19LUkJfTEVWRUxdKTsKIAotICAgICAgICBpZihDdXJsX3NlY19sb2dpbihjb25uKSAhPSAwKQorICAgICAgICBpZihDdXJsX3NlY19sb2dpbihjb25uKSAhPSBDVVJMRV9PSykKICAgICAgICAgICBpbmZvZihkYXRhLCAiTG9nZ2luZyBpbiB3aXRoIHBhc3N3b3JkIGluIGNsZWFydGV4dCFcbiIpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgaW5mb2YoZGF0YSwgIkF1dGhlbnRpY2F0aW9uIHN1Y2Nlc3NmdWxcbiIpOwpAQCAtMjg1Nyw2ICsyODcxLDggQEAKICAgaWYoVFJVRSA9PSBpc0JhZEZ0cFN0cmluZyhmdHAtPnBhc3N3ZCkpCiAgICAgcmV0dXJuIENVUkxFX1VSTF9NQUxGT1JNQVQ7CiAKKyAgY29ubi0+cHJvdG8uZnRwYy5rbm93bl9maWxlc2l6ZSA9IC0xOyAvKiB1bmtub3duIHNpemUgZm9yIG5vdyAqLworCiAgIHJldHVybiBDVVJMRV9PSzsKIH0KIApAQCAtMzAyMCw2ICszMDM2LDEzIEBACiAgIGlmKGZ0cGMtPnByZXZwYXRoKQogICAgIGZyZWUoZnRwYy0+cHJldnBhdGgpOwogCisgIGlmKGRhdGEtPnNldC53aWxkY2FyZG1hdGNoKSB7CisgICAgaWYoZGF0YS0+c2V0LmNodW5rX2VuZCAmJiBmdHBjLT5maWxlKSB7CisgICAgICBkYXRhLT5zZXQuY2h1bmtfZW5kKGRhdGEtPndpbGRjYXJkLmN1c3RvbXB0cik7CisgICAgfQorICAgIGZ0cGMtPmtub3duX2ZpbGVzaXplID0gLTE7CisgIH0KKwogICAvKiBnZXQgdGhlICJyYXciIHBhdGggKi8KICAgcGF0aCA9IGN1cmxfZWFzeV91bmVzY2FwZShkYXRhLCBwYXRoX3RvX3VzZSwgMCwgTlVMTCk7CiAgIGlmKCFwYXRoKSB7CkBAIC0zMDUzLDEwICszMDc2LDYgQEAKICAgLyogZnJlZSB0aGUgZGlyIHRyZWUgYW5kIGZpbGUgcGFydHMgKi8KICAgZnJlZWRpcnMoZnRwYyk7CiAKLSNpZiBkZWZpbmVkKEhBVkVfS1JCNCkgfHwgZGVmaW5lZChIQVZFX0dTU0FQSSkKLSAgQ3VybF9zZWNfZmZsdXNoX2ZkKGNvbm4sIGNvbm4tPnNvY2tbU0VDT05EQVJZU09DS0VUXSk7Ci0jZW5kaWYKLQogICAvKiBzaHV0IGRvd24gdGhlIHNvY2tldCB0byBpbmZvcm0gdGhlIHNlcnZlciB3ZSdyZSBkb25lICovCiAKICNpZmRlZiBfV0lOMzJfV0NFCkBAIC0zMTgwLDYgKzMxOTksOCBAQAogICBzc2l6ZV90IG5yZWFkOwogICBpbnQgZnRwY29kZTsKICAgQ1VSTGNvZGUgcmVzdWx0OworICBzdHJ1Y3QgZnRwX2Nvbm4gKmZ0cGMgPSAmY29ubi0+cHJvdG8uZnRwYzsKKyAgc3RydWN0IHBpbmdwb25nICpwcCA9ICZmdHBjLT5wcDsKIAogICBpdGVtID0gcXVvdGU7CiAgIHdoaWxlKGl0ZW0pIHsKQEAgLTMxOTksNiArMzIyMCw4IEBACiAKICAgICAgIEZUUFNFTkRGKGNvbm4sICIlcyIsIGNtZCk7CiAKKyAgICAgIHBwLT5yZXNwb25zZSA9IEN1cmxfdHZub3coKTsgLyogdGltZW91dCByZWxhdGl2ZSBub3cgKi8KKwogICAgICAgcmVzdWx0ID0gQ3VybF9HZXRGVFBSZXNwb25zZSgmbnJlYWQsIGNvbm4sICZmdHBjb2RlKTsKICAgICAgIGlmKHJlc3VsdCkKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTMyODUsNyArMzMwOCw2IEBACiBzdGF0aWMgQ1VSTGNvZGUgZnRwX3JhbmdlKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubikKIHsKICAgY3VybF9vZmZfdCBmcm9tLCB0bzsKLSAgY3VybF9vZmZfdCB0b3RhbHNpemU9LTE7CiAgIGNoYXIgKnB0cjsKICAgY2hhciAqcHRyMjsKICAgc3RydWN0IFNlc3Npb25IYW5kbGUgKmRhdGEgPSBjb25uLT5kYXRhOwpAQCAtMzI5Myw3ICszMzE1LDcgQEAKIAogICBpZihkYXRhLT5zdGF0ZS51c2VfcmFuZ2UgJiYgZGF0YS0+c3RhdGUucmFuZ2UpIHsKICAgICBmcm9tPWN1cmx4X3N0cnRvb2ZmdChkYXRhLT5zdGF0ZS5yYW5nZSwgJnB0ciwgMCk7Ci0gICAgd2hpbGUocHRyICYmICpwdHIgJiYgKElTU1BBQ0UoKnB0cikgfHwgKCpwdHI9PSctJykpKQorICAgIHdoaWxlKCpwdHIgJiYgKElTU1BBQ0UoKnB0cikgfHwgKCpwdHI9PSctJykpKQogICAgICAgcHRyKys7CiAgICAgdG89Y3VybHhfc3RydG9vZmZ0KHB0ciwgJnB0cjIsIDApOwogICAgIGlmKHB0ciA9PSBwdHIyKSB7CkBAIC0zMzA4LDE2ICszMzMwLDE0IEBACiAgICAgfQogICAgIGVsc2UgaWYoZnJvbSA8IDApIHsKICAgICAgIC8qIC1ZICovCi0gICAgICB0b3RhbHNpemUgPSAtZnJvbTsKICAgICAgIGRhdGEtPnJlcS5tYXhkb3dubG9hZCA9IC1mcm9tOwogICAgICAgZGF0YS0+c3RhdGUucmVzdW1lX2Zyb20gPSBmcm9tOwogICAgICAgREVCVUdGKGluZm9mKGNvbm4tPmRhdGEsICJGVFAgUkFOR0UgdGhlIGxhc3QgJSIgRk9STUFUX09GRl9UICIgYnl0ZXNcbiIsCi0gICAgICAgICAgICAgICAgICAgdG90YWxzaXplKSk7CisgICAgICAgICAgICAgICAgICAgLWZyb20pKTsKICAgICB9CiAgICAgZWxzZSB7CiAgICAgICAvKiBYLVkgKi8KLSAgICAgIHRvdGFsc2l6ZSA9IHRvLWZyb207Ci0gICAgICBkYXRhLT5yZXEubWF4ZG93bmxvYWQgPSB0b3RhbHNpemUrMTsgLyogaW5jbHVkZSBsYXN0IGJ5dGUgKi8KKyAgICAgIGRhdGEtPnJlcS5tYXhkb3dubG9hZCA9ICh0by1mcm9tKSsxOyAvKiBpbmNsdWRlIGxhc3QgYnl0ZSAqLwogICAgICAgZGF0YS0+c3RhdGUucmVzdW1lX2Zyb20gPSBmcm9tOwogICAgICAgREVCVUdGKGluZm9mKGNvbm4tPmRhdGEsICJGVFAgUkFOR0UgZnJvbSAlIiBGT1JNQVRfT0ZGX1QKICAgICAgICAgICAgICAgICAgICAiIGdldHRpbmcgJSIgRk9STUFUX09GRl9UICIgYnl0ZXNcbiIsCkBAIC0zMzkzLDcgKzM0MTMsNyBAQAogICBpZigocmVzdWx0ID09IENVUkxFX09LKSAmJiAoZnRwLT50cmFuc2ZlciAhPSBGVFBUUkFOU0ZFUl9CT0RZKSkKICAgICAvKiBubyBkYXRhIHRvIHRyYW5zZmVyLiBGSVg6IGl0IGZlZWxzIGxpa2UgYSBrbHVkZ2UgdG8gaGF2ZSB0aGlzIGhlcmUKICAgICAgICB0b28hICovCi0gICAgcmVzdWx0ID0gQ3VybF9zZXR1cF90cmFuc2Zlcihjb25uLCAtMSwgLTEsIEZBTFNFLCBOVUxMLCAtMSwgTlVMTCk7CisgICAgQ3VybF9zZXR1cF90cmFuc2Zlcihjb25uLCAtMSwgLTEsIEZBTFNFLCBOVUxMLCAtMSwgTlVMTCk7CiAKICAgLyogZW5kIG9mIHRyYW5zZmVyICovCiAgIERFQlVHRihpbmZvZihkYXRhLCAiRE8tTU9SRSBwaGFzZSBlbmRzIHdpdGggJWRcbiIsIChpbnQpcmVzdWx0KSk7CkBAIC0zNDUwLDYgKzM0NzAsMjIxIEBACiAgIHJldHVybiByZXN1bHQ7CiB9CiAKK3N0YXRpYyB2b2lkIHdjX2RhdGFfZHRvcih2b2lkICpwdHIpCit7CisgIHN0cnVjdCBmdHBfd2NfdG1wZGF0YSAqdG1wID0gcHRyOworICBpZih0bXApCisgICAgQ3VybF9mdHBfcGFyc2VsaXN0X2RhdGFfZnJlZSgmdG1wLT5wYXJzZXIpOworICBDdXJsX3NhZmVmcmVlKHRtcCk7Cit9CisKK3N0YXRpYyBDVVJMY29kZSBpbml0X3djX2RhdGEoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uKQoreworICBjaGFyICpsYXN0X3NsYXNoOworICBjaGFyICpwYXRoID0gY29ubi0+ZGF0YS0+c3RhdGUucGF0aDsKKyAgc3RydWN0IFdpbGRjYXJkRGF0YSAqd2lsZGNhcmQgPSAmKGNvbm4tPmRhdGEtPndpbGRjYXJkKTsKKyAgQ1VSTGNvZGUgcmV0ID0gQ1VSTEVfT0s7CisgIHN0cnVjdCBmdHBfd2NfdG1wZGF0YSAqZnRwX3RtcDsKKworICBsYXN0X3NsYXNoID0gc3RycmNocihjb25uLT5kYXRhLT5zdGF0ZS5wYXRoLCAnLycpOworICBpZihsYXN0X3NsYXNoKSB7CisgICAgbGFzdF9zbGFzaCsrOworICAgIGlmKGxhc3Rfc2xhc2hbMF0gPT0gJ1wwJykgeworICAgICAgd2lsZGNhcmQtPnN0YXRlID0gQ1VSTFdDX0NMRUFOOworICAgICAgcmV0ID0gZnRwX3BhcnNlX3VybF9wYXRoKGNvbm4pOworICAgICAgcmV0dXJuIHJldDsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICB3aWxkY2FyZC0+cGF0dGVybiA9IHN0cmR1cChsYXN0X3NsYXNoKTsKKyAgICAgIGlmICghd2lsZGNhcmQtPnBhdHRlcm4pCisgICAgICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOworICAgICAgbGFzdF9zbGFzaFswXSA9ICdcMCc7IC8qIGN1dCBmaWxlIGZyb20gcGF0aCAqLworICAgIH0KKyAgfQorICBlbHNlIHsgLyogdGhlcmUgaXMgb25seSAnd2lsZGNhcmQgcGF0dGVybicgb3Igbm90aGluZyAqLworICAgIGlmKHBhdGhbMF0pIHsKKyAgICAgIHdpbGRjYXJkLT5wYXR0ZXJuID0gc3RyZHVwKHBhdGgpOworICAgICAgaWYgKCF3aWxkY2FyZC0+cGF0dGVybikKKyAgICAgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CisgICAgICBwYXRoWzBdID0gJ1wwJzsKKyAgICB9CisgICAgZWxzZSB7IC8qIG9ubHkgbGlzdCAqLworICAgICAgd2lsZGNhcmQtPnN0YXRlID0gQ1VSTFdDX0NMRUFOOworICAgICAgcmV0ID0gZnRwX3BhcnNlX3VybF9wYXRoKGNvbm4pOworICAgICAgcmV0dXJuIHJldDsKKyAgICB9CisgIH0KKworICAvKiBwcm9ncmFtIGNvbnRpbnVlcyBvbmx5IGlmIFVSTCBpcyBub3QgZW5kaW5nIHdpdGggc2xhc2gsIGFsbG9jYXRlIG5lZWRlZAorICAgICByZXNvdXJjZXMgZm9yIHdpbGRjYXJkIHRyYW5zZmVyICovCisKKyAgLyogYWxsb2NhdGUgZnRwIHByb3RvY29sIHNwZWNpZmljIHRlbXBvcmFyeSB3aWxkY2FyZCBkYXRhICovCisgIGZ0cF90bXAgPSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBmdHBfd2NfdG1wZGF0YSkpOworICBpZighZnRwX3RtcCkgeworICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOworICB9CisKKyAgLyogSU5JVElBTElaRSBwYXJzZWxpc3Qgc3RydWN0dXJlICovCisgIGZ0cF90bXAtPnBhcnNlciA9IEN1cmxfZnRwX3BhcnNlbGlzdF9kYXRhX2FsbG9jKCk7CisgIGlmKCFmdHBfdG1wLT5wYXJzZXIpIHsKKyAgICBmcmVlKGZ0cF90bXApOworICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOworICB9CisKKyAgd2lsZGNhcmQtPnRtcCA9IGZ0cF90bXA7IC8qIHB1dCBpdCB0byB0aGUgV2lsZGNhcmREYXRhIHRtcCBwb2ludGVyICovCisgIHdpbGRjYXJkLT50bXBfZHRvciA9IHdjX2RhdGFfZHRvcjsKKworICAvKiB3aWxkY2FyZCBkb2VzIG5vdCBzdXBwb3J0IE5PQ1dEIG9wdGlvbiAoYXNzZXJ0IGl0PykgKi8KKyAgaWYoY29ubi0+ZGF0YS0+c2V0LmZ0cF9maWxlbWV0aG9kID09IEZUUEZJTEVfTk9DV0QpCisgICAgY29ubi0+ZGF0YS0+c2V0LmZ0cF9maWxlbWV0aG9kID0gRlRQRklMRV9NVUxUSUNXRDsKKworICAvKiB0cnkgdG8gcGFyc2UgZnRwIHVybCAqLworICByZXQgPSBmdHBfcGFyc2VfdXJsX3BhdGgoY29ubik7CisgIGlmKHJldCkgeworICAgIHJldHVybiByZXQ7CisgIH0KKworICAvKiBiYWNrdXAgb2xkIHdyaXRlX2Z1bmN0aW9uICovCisgIGZ0cF90bXAtPmJhY2t1cC53cml0ZV9mdW5jdGlvbiA9IGNvbm4tPmRhdGEtPnNldC5md3JpdGVfZnVuYzsKKyAgLyogcGFyc2luZyB3cml0ZSBmdW5jdGlvbiAoY2FsbGJhY2sgaW5jbHVkZWQgZGlyZWN0bHkgZnJvbSBmdHBsaXN0cGFyc2VyLmMpICovCisgIGNvbm4tPmRhdGEtPnNldC5md3JpdGVfZnVuYyA9IEN1cmxfZnRwX3BhcnNlbGlzdDsKKyAgLyogYmFja3VwIG9sZCBmaWxlIGRlc2NyaXB0b3IgKi8KKyAgZnRwX3RtcC0+YmFja3VwLmZpbGVfZGVzY3JpcHRvciA9IGNvbm4tPmRhdGEtPnNldC5vdXQ7CisgIC8qIGxldCB0aGUgd3JpdGVmdW5jIGNhbGxiYWNrIGtub3cgd2hhdCBjdXJsIHBvaW50ZXIgaXMgd29ya2luZyB3aXRoICovCisgIGNvbm4tPmRhdGEtPnNldC5vdXQgPSBjb25uOworCisgIHdpbGRjYXJkLT5wYXRoID0gc3RyZHVwKGNvbm4tPmRhdGEtPnN0YXRlLnBhdGgpOworICBpZighd2lsZGNhcmQtPnBhdGgpIHsKKyAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKKyAgfQorCisgIGluZm9mKGNvbm4tPmRhdGEsICJXaWxkY2FyZCAtIFBhcnNpbmcgc3RhcnRlZFxuIik7CisgIHJldHVybiBDVVJMRV9PSzsKK30KKworc3RhdGljIENVUkxjb2RlIHdjX3N0YXRlbWFjaChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pCit7CisgIHN0cnVjdCBmdHBfY29ubiAqZnRwYyA9ICZjb25uLT5wcm90by5mdHBjOworICBzdHJ1Y3QgV2lsZGNhcmREYXRhICp3aWxkY2FyZCA9ICYoY29ubi0+ZGF0YS0+d2lsZGNhcmQpOworICBzdHJ1Y3QgZnRwX3djX3RtcGRhdGEgKmZ0cF90bXAgPSB3aWxkY2FyZC0+dG1wOworICBjaGFyICp0bXBfcGF0aDsKKyAgQ1VSTGNvZGUgcmV0ID0gQ1VSTEVfT0s7CisgIGxvbmcgdXNlcnJlc3BvbnNlID0gMDsKKyAgc3dpdGNoICh3aWxkY2FyZC0+c3RhdGUpIHsKKyAgY2FzZSBDVVJMV0NfSU5JVDoKKyAgICByZXQgPSBpbml0X3djX2RhdGEoY29ubik7CisgICAgaWYod2lsZGNhcmQtPnN0YXRlID09IENVUkxXQ19DTEVBTikKKyAgICAgIC8qIG9ubHkgbGlzdGluZyEgKi8KKyAgICAgIGJyZWFrOworICAgIGVsc2UKKyAgICAgIHdpbGRjYXJkLT5zdGF0ZSA9IHJldCA/IENVUkxXQ19FUlJPUiA6IENVUkxXQ19NQVRDSElORzsKKyAgICBicmVhazsKKworICBjYXNlIENVUkxXQ19NQVRDSElORzoKKyAgICAvKiBJbiB0aGlzIHN0YXRlIGlzIExJU1QgcmVzcG9uc2Ugc3VjY2Vzc2Z1bGx5IHBhcnNlZCwgc28gbGV0cyByZXN0b3JlCisgICAgICAgcHJldmlvdXMgV1JJVEVGVU5DVElPTiBjYWxsYmFjayBhbmQgV1JJVEVEQVRBIHBvaW50ZXIgKi8KKyAgICBmdHBfdG1wID0gd2lsZGNhcmQtPnRtcDsKKyAgICBjb25uLT5kYXRhLT5zZXQuZndyaXRlX2Z1bmMgPSBmdHBfdG1wLT5iYWNrdXAud3JpdGVfZnVuY3Rpb247CisgICAgY29ubi0+ZGF0YS0+c2V0Lm91dCA9IGZ0cF90bXAtPmJhY2t1cC5maWxlX2Rlc2NyaXB0b3I7CisgICAgd2lsZGNhcmQtPnN0YXRlID0gQ1VSTFdDX0RPV05MT0FESU5HOworCisgICAgaWYoQ3VybF9mdHBfcGFyc2VsaXN0X2dldGVycm9yKGZ0cF90bXAtPnBhcnNlcikpIHsKKyAgICAgIC8qIGVycm9yIGZvdW5kIGluIExJU1QgcGFyc2luZyAqLworICAgICAgd2lsZGNhcmQtPnN0YXRlID0gQ1VSTFdDX0NMRUFOOworICAgICAgcmV0dXJuIHdjX3N0YXRlbWFjaChjb25uKTsKKyAgICB9CisgICAgZWxzZSBpZih3aWxkY2FyZC0+ZmlsZWxpc3QtPnNpemUgPT0gMCkgeworICAgICAgLyogbm8gY29ycmVzcG9uZGluZyBmaWxlICovCisgICAgICB3aWxkY2FyZC0+c3RhdGUgPSBDVVJMV0NfQ0xFQU47CisgICAgICByZXR1cm4gQ1VSTEVfUkVNT1RFX0ZJTEVfTk9UX0ZPVU5EOworICAgIH0KKyAgICByZXQgPSB3Y19zdGF0ZW1hY2goY29ubik7CisgICAgYnJlYWs7CisKKyAgY2FzZSBDVVJMV0NfRE9XTkxPQURJTkc6IHsKKyAgICAvKiBmaWxlbGlzdCBoYXMgYXQgbGVhc3Qgb25lIGZpbGUsIGxldHMgZ2V0IGZpcnN0IG9uZSAqLworICAgIHN0cnVjdCBjdXJsX2ZpbGVpbmZvICpmaW5mbyA9IHdpbGRjYXJkLT5maWxlbGlzdC0+aGVhZC0+cHRyOworICAgIHRtcF9wYXRoID0gbWFsbG9jKHN0cmxlbihjb25uLT5kYXRhLT5zdGF0ZS5wYXRoKSArCisgICAgICAgICAgICAgICAgICAgICAgc3RybGVuKGZpbmZvLT5maWxlbmFtZSkgKyAxKTsKKyAgICBpZighdG1wX3BhdGgpIHsKKyAgICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOworICAgIH0KKworICAgIHRtcF9wYXRoWzBdID0gMDsKKyAgICAvKiBtYWtlIGZ1bGwgcGF0aCB0byBtYXRjaGVkIGZpbGUgKi8KKyAgICBzdHJjYXQodG1wX3BhdGgsIHdpbGRjYXJkLT5wYXRoKTsKKyAgICBzdHJjYXQodG1wX3BhdGgsIGZpbmZvLT5maWxlbmFtZSk7CisgICAgLyogc3dpdGNoIGRlZmF1bHQgInN0YXRlLnBhdGhidWZmZXIiIGFuZCB0bXBfcGF0aCwgZ29vZCB0byBzZWUKKyAgICAgICBmdHBfcGFyc2VfdXJsX3BhdGggZnVuY3Rpb24gdG8gdW5kZXJzdGFuZCB0aGlzIHRyaWNrICovCisgICAgaWYoY29ubi0+ZGF0YS0+c3RhdGUucGF0aGJ1ZmZlcikKKyAgICAgIGZyZWUoY29ubi0+ZGF0YS0+c3RhdGUucGF0aGJ1ZmZlcik7CisgICAgY29ubi0+ZGF0YS0+c3RhdGUucGF0aGJ1ZmZlciA9IHRtcF9wYXRoOworICAgIGNvbm4tPmRhdGEtPnN0YXRlLnBhdGggPSB0bXBfcGF0aDsKKworICAgIGluZm9mKGNvbm4tPmRhdGEsICJXaWxkY2FyZCAtIFNUQVJUIG9mIFwiJXNcIlxuIiwgZmluZm8tPmZpbGVuYW1lKTsKKyAgICBpZihjb25uLT5kYXRhLT5zZXQuY2h1bmtfYmduKSB7CisgICAgICB1c2VycmVzcG9uc2UgPSBjb25uLT5kYXRhLT5zZXQuY2h1bmtfYmduKAorICAgICAgICAgIGZpbmZvLCB3aWxkY2FyZC0+Y3VzdG9tcHRyLCAoaW50KXdpbGRjYXJkLT5maWxlbGlzdC0+c2l6ZSk7CisgICAgICBzd2l0Y2godXNlcnJlc3BvbnNlKSB7CisgICAgICBjYXNlIENVUkxfQ0hVTktfQkdOX0ZVTkNfU0tJUDoKKyAgICAgICAgaW5mb2YoY29ubi0+ZGF0YSwgIldpbGRjYXJkIC0gXCIlc1wiIHNraXBwZWQgYnkgdXNlclxuIiwKKyAgICAgICAgICAgICAgZmluZm8tPmZpbGVuYW1lKTsKKyAgICAgICAgd2lsZGNhcmQtPnN0YXRlID0gQ1VSTFdDX1NLSVA7CisgICAgICAgIHJldHVybiB3Y19zdGF0ZW1hY2goY29ubik7CisgICAgICBjYXNlIENVUkxfQ0hVTktfQkdOX0ZVTkNfRkFJTDoKKyAgICAgICAgcmV0dXJuIENVUkxFX0NIVU5LX0ZBSUxFRDsKKyAgICAgIH0KKyAgICB9CisKKyAgICBpZihmaW5mby0+ZmlsZXR5cGUgIT0gQ1VSTEZJTEVUWVBFX0ZJTEUpIHsKKyAgICAgIHdpbGRjYXJkLT5zdGF0ZSA9IENVUkxXQ19TS0lQOworICAgICAgcmV0dXJuIHdjX3N0YXRlbWFjaChjb25uKTsKKyAgICB9CisKKyAgICBpZihmaW5mby0+ZmxhZ3MgJiBDVVJMRklORk9GTEFHX0tOT1dOX1NJWkUpCisgICAgICBmdHBjLT5rbm93bl9maWxlc2l6ZSA9IGZpbmZvLT5zaXplOworCisgICAgcmV0ID0gZnRwX3BhcnNlX3VybF9wYXRoKGNvbm4pOworICAgIGlmKHJldCkgeworICAgICAgcmV0dXJuIHJldDsKKyAgICB9CisKKyAgICAvKiB3ZSBkb24ndCBuZWVkIHRoZSBDdXJsX2ZpbGVpbmZvIG9mIGZpcnN0IGZpbGUgYW55bW9yZSAqLworICAgIEN1cmxfbGxpc3RfcmVtb3ZlKHdpbGRjYXJkLT5maWxlbGlzdCwgd2lsZGNhcmQtPmZpbGVsaXN0LT5oZWFkLCBOVUxMKTsKKworICAgIGlmKHdpbGRjYXJkLT5maWxlbGlzdC0+c2l6ZSA9PSAwKSB7IC8qIHJlbWFpbnMgb25seSBvbmUgZmlsZSB0byBkb3duLiAqLworICAgICAgd2lsZGNhcmQtPnN0YXRlID0gQ1VSTFdDX0NMRUFOOworICAgICAgLyogYWZ0ZXIgdGhhdCB3aWxsIGJlIGZ0cF9kbyBjYWxsZWQgb25jZSBhZ2FpbiBhbmQgbm8gdHJhbnNmZXIKKyAgICAgICAgIHdpbGwgYmUgZG9uZSBiZWNhdXNlIG9mIENVUkxXQ19DTEVBTiBzdGF0ZSAqLworICAgICAgcmV0dXJuIENVUkxFX09LOworICAgIH0KKyAgfSBicmVhazsKKworICBjYXNlIENVUkxXQ19TS0lQOiB7CisgICAgaWYoY29ubi0+ZGF0YS0+c2V0LmNodW5rX2VuZCkKKyAgICAgIGNvbm4tPmRhdGEtPnNldC5jaHVua19lbmQoY29ubi0+ZGF0YS0+d2lsZGNhcmQuY3VzdG9tcHRyKTsKKyAgICBDdXJsX2xsaXN0X3JlbW92ZSh3aWxkY2FyZC0+ZmlsZWxpc3QsIHdpbGRjYXJkLT5maWxlbGlzdC0+aGVhZCwgTlVMTCk7CisgICAgd2lsZGNhcmQtPnN0YXRlID0gKHdpbGRjYXJkLT5maWxlbGlzdC0+c2l6ZSA9PSAwKSA/CisgICAgICAgICAgICAgICAgICAgICAgQ1VSTFdDX0NMRUFOIDogQ1VSTFdDX0RPV05MT0FESU5HOworICAgIHJldCA9IHdjX3N0YXRlbWFjaChjb25uKTsKKyAgfSBicmVhazsKKworICBjYXNlIENVUkxXQ19DTEVBTjoKKyAgICByZXQgPSBDVVJMRV9PSzsKKyAgICBpZihmdHBfdG1wKSB7CisgICAgICByZXQgPSBDdXJsX2Z0cF9wYXJzZWxpc3RfZ2V0ZXJyb3IoZnRwX3RtcC0+cGFyc2VyKTsKKyAgICB9CisgICAgd2lsZGNhcmQtPnN0YXRlID0gcmV0ID8gQ1VSTFdDX0VSUk9SIDogQ1VSTFdDX0RPTkU7CisgICAgYnJlYWs7CisKKyAgY2FzZSBDVVJMV0NfRE9ORToKKyAgY2FzZSBDVVJMV0NfRVJST1I6CisgICAgYnJlYWs7CisgIH0KKworICByZXR1cm4gcmV0OworfQorCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCiAgKiBmdHBfZG8oKQpAQCAtMzQ3Niw5ICszNzExLDIxIEBACiAgIGlmKHJldGNvZGUpCiAgICAgcmV0dXJuIHJldGNvZGU7CiAKLSAgcmV0Y29kZSA9IGZ0cF9wYXJzZV91cmxfcGF0aChjb25uKTsKLSAgaWYocmV0Y29kZSkKLSAgICByZXR1cm4gcmV0Y29kZTsKKyAgaWYoY29ubi0+ZGF0YS0+c2V0LndpbGRjYXJkbWF0Y2gpIHsKKyAgICByZXRjb2RlID0gd2Nfc3RhdGVtYWNoKGNvbm4pOworICAgIGlmKGNvbm4tPmRhdGEtPndpbGRjYXJkLnN0YXRlID09IENVUkxXQ19TS0lQIHx8CisgICAgICBjb25uLT5kYXRhLT53aWxkY2FyZC5zdGF0ZSA9PSBDVVJMV0NfRE9ORSkgeworICAgICAgLyogZG8gbm90IGNhbGwgZnRwX3JlZ3VsYXJfdHJhbnNmZXIgKi8KKyAgICAgIHJldHVybiBDVVJMRV9PSzsKKyAgICB9CisgICAgaWYocmV0Y29kZSkgLyogZXJyb3IsIGxvb3Agb3Igc2tpcHBpbmcgdGhlIGZpbGUgKi8KKyAgICAgIHJldHVybiByZXRjb2RlOworICB9CisgIGVsc2UgeyAvKiBubyB3aWxkY2FyZCBGU00gbmVlZGVkICovCisgICAgcmV0Y29kZSA9IGZ0cF9wYXJzZV91cmxfcGF0aChjb25uKTsKKyAgICBpZihyZXRjb2RlKQorICAgICAgcmV0dXJuIHJldGNvZGU7CisgIH0KIAogICByZXRjb2RlID0gZnRwX3JlZ3VsYXJfdHJhbnNmZXIoY29ubiwgZG9uZSk7CiAKQEAgLTM2MTMsNiArMzg2MCwxMCBAQAogCiAgIEN1cmxfcHBfZGlzY29ubmVjdChwcCk7CiAKKyNpZiBkZWZpbmVkKEhBVkVfS1JCNCkgfHwgZGVmaW5lZChIQVZFX0dTU0FQSSkKKyAgQ3VybF9zZWNfZW5kKGNvbm4pOworI2VuZGlmCisKICAgcmV0dXJuIENVUkxFX09LOwogfQogCkBAIC0zODIwLDcgKzQwNzEsNyBAQAogCiAgIGlmKGZ0cC0+dHJhbnNmZXIgIT0gRlRQVFJBTlNGRVJfQk9EWSkKICAgICAvKiBubyBkYXRhIHRvIHRyYW5zZmVyICovCi0gICAgcmVzdWx0PUN1cmxfc2V0dXBfdHJhbnNmZXIoY29ubiwgLTEsIC0xLCBGQUxTRSwgTlVMTCwgLTEsIE5VTEwpOworICAgIEN1cmxfc2V0dXBfdHJhbnNmZXIoY29ubiwgLTEsIC0xLCBGQUxTRSwgTlVMTCwgLTEsIE5VTEwpOwogICBlbHNlIGlmKCFjb25uZWN0ZWQpCiAgICAgLyogc2luY2Ugd2UgZGlkbid0IGNvbm5lY3Qgbm93LCB3ZSB3YW50IGRvX21vcmUgdG8gZ2V0IGNhbGxlZCAqLwogICAgIGNvbm4tPmJpdHMuZG9fbW9yZSA9IFRSVUU7CkBAIC0zOTI3LDYgKzQxNzgsNyBAQAogICB9CiAKICAgZGF0YS0+c3RhdGUucGF0aCsrOyAgIC8qIGRvbid0IGluY2x1ZGUgdGhlIGluaXRpYWwgc2xhc2ggKi8KKyAgZGF0YS0+c3RhdGUuc2xhc2hfcmVtb3ZlZCA9IFRSVUU7IC8qIHdlJ3ZlIHNraXBwZWQgdGhlIHNsYXNoICovCiAKICAgLyogRlRQIFVSTHMgc3VwcG9ydCBhbiBleHRlbnNpb24gbGlrZSAiO3R5cGU9PHR5cGVjb2RlPiIgdGhhdAogICAgKiB3ZSdsbCB0cnkgdG8gZ2V0IG5vdyEgKi8KQEAgLTM5MzgsNiArNDE5MCw3IEBACiAgIGlmKHR5cGUpIHsKICAgICAqdHlwZSA9IDA7ICAgICAgICAgICAgICAgICAgICAgLyogaXQgd2FzIGluIHRoZSBtaWRkbGUgb2YgdGhlIGhvc3RuYW1lICovCiAgICAgY29tbWFuZCA9IEN1cmxfcmF3X3RvdXBwZXIodHlwZVs2XSk7CisgICAgY29ubi0+Yml0cy50eXBlX3NldCA9IFRSVUU7CiAKICAgICBzd2l0Y2ggKGNvbW1hbmQpIHsKICAgICBjYXNlICdBJzogLyogQVNDSUkgbW9kZSAqLwpkaWZmIC0tZ2l0IGEvbGliL2Z0cC5oIGIvbGliL2Z0cC5oCmluZGV4IDdhNGY4OWUuLmQ4ZWYzNDggMTAwNjQ0Ci0tLSBhL2xpYi9mdHAuaAorKysgYi9saWIvZnRwLmgKQEAgLTc5LDYgKzc5LDE3IEBACiAgIEZUUF9MQVNUICAvKiBuZXZlciB1c2VkICovCiB9IGZ0cHN0YXRlOwogCitzdHJ1Y3QgZnRwX3BhcnNlbGlzdF9kYXRhOyAvKiBkZWZpbmVkIGxhdGVyIGluIGZ0cGxpc3RwYXJzZXIuYyAqLworCitzdHJ1Y3QgZnRwX3djX3RtcGRhdGEgeworICBzdHJ1Y3QgZnRwX3BhcnNlbGlzdF9kYXRhICpwYXJzZXI7CisKKyAgc3RydWN0IHsKKyAgICBjdXJsX3dyaXRlX2NhbGxiYWNrIHdyaXRlX2Z1bmN0aW9uOworICAgIEZJTEUgKmZpbGVfZGVzY3JpcHRvcjsKKyAgfSBiYWNrdXA7Cit9OworCiB0eXBlZGVmIGVudW0gewogICBGVFBGSUxFX01VTFRJQ1dEICA9IDEsIC8qIGFzIGRlZmluZWQgYnkgUkZDMTczOCAqLwogICBGVFBGSUxFX05PQ1dEICAgICA9IDIsIC8qIHVzZSBTSVpFIC8gUkVUUiAvIFNUT1Igb24gdGhlIGZ1bGwgcGF0aCAqLwpAQCAtMTM1LDYgKzE0Niw4IEBACiAgIGludCBjb3VudDM7IC8qIGdlbmVyYWwgcHVycG9zZSBjb3VudGVyIGZvciB0aGUgc3RhdGUgbWFjaGluZSAqLwogICBmdHBzdGF0ZSBzdGF0ZTsgLyogYWx3YXlzIHVzZSBmdHAuYzpzdGF0ZSgpIHRvIGNoYW5nZSBzdGF0ZSEgKi8KICAgY2hhciAqIHNlcnZlcl9vczsgICAgIC8qIFRoZSB0YXJnZXQgc2VydmVyIG9wZXJhdGluZyBzeXN0ZW0uICovCisgIGN1cmxfb2ZmX3Qga25vd25fZmlsZXNpemU7IC8qIGZpbGUgc2l6ZSBpcyBkaWZmZXJlbnQgZnJvbSAtMSwgaWYgd2lsZGNhcmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTElTVCBwYXJzaW5nIHdhcyBkb25lIGFuZCB3Y19zdGF0ZW1hY2ggc2V0IGl0ICovCiB9OwogCiAjZW5kaWYgLyogSEVBREVSX0NVUkxfRlRQX0ggKi8KZGlmZiAtLWdpdCBhL2xpYi9mdHBsaXN0cGFyc2VyLmMgYi9saWIvZnRwbGlzdHBhcnNlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1OWVhN2UKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZnRwbGlzdHBhcnNlci5jCkBAIC0wLDAgKzEsMTA0NSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyAqCisgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKgorICogTm93IGltcGxlbWVudGVkOgorICoKKyAqIDEpIFVOSVggdmVyc2lvbiAxCisgKiBkcnd4ci14ci14IDEgdXNlcjAxIGZ0cCAgNTEyIEphbiAyOSAyMzozMiBwcm9nCisgKiAyKSBVTklYIHZlcnNpb24gMgorICogZHJ3eHIteHIteCAxIHVzZXIwMSBmdHAgIDUxMiBKYW4gMjkgMTk5NyAgcHJvZworICogMykgVU5JWCB2ZXJzaW9uIDMKKyAqIGRyd3hyLXhyLXggMSAgICAgIDEgICAxICA1MTIgSmFuIDI5IDIzOjMyIHByb2cKKyAqIDQpIFVOSVggc3ltbGluaworICogbHJ3eHIteHIteCAxIHVzZXIwMSBmdHAgIDUxMiBKYW4gMjkgMjM6MzIgcHJvZyAtPiBwcm9nMjAwMAorICogNSkgRE9TIHN0eWxlCisgKiAwMS0yOS05NyAxMTozMlBNIDxESVI+IHByb2cKKyAqLworCisjaW5jbHVkZSAic2V0dXAuaCIKKworI2luY2x1ZGUgPHRpbWUuaD4KKworI2luY2x1ZGUgImZ0cGxpc3RwYXJzZXIuaCIKKyNpbmNsdWRlICJjdXJsX2ZubWF0Y2guaCIKKworI2luY2x1ZGUgInVybGRhdGEuaCIKKyNpbmNsdWRlICJmdHAuaCIKKyNpbmNsdWRlICJmaWxlaW5mby5oIgorI2luY2x1ZGUgImxsaXN0LmgiCisjaW5jbHVkZSAic3RydG9vZmZ0LmgiCisjaW5jbHVkZSAicmF3c3RyLmgiCisjaW5jbHVkZSAiZnRwLmgiCisKKyNkZWZpbmUgX01QUklOVEZfUkVQTEFDRSAvKiB1c2Ugb3VyIGZ1bmN0aW9ucyBvbmx5ICovCisjaW5jbHVkZSA8Y3VybC9tcHJpbnRmLmg+CisKKyNpbmNsdWRlICJjdXJsX21lbW9yeS5oIgorLyogVGhlIGxhc3QgI2luY2x1ZGUgZmlsZSBzaG91bGQgYmU6ICovCisjaW5jbHVkZSAibWVtZGVidWcuaCIKKworLyogYWxsb2NzIGJ1ZmZlciB3aGljaCB3aWxsIGNvbnRhaW4gb25lIGxpbmUgb2YgTElTVCBjb21tYW5kIHJlc3BvbnNlICovCisjZGVmaW5lIEZUUF9CVUZGRVJfQUxMT0NTSVpFIDE2MAorCit0eXBlZGVmIGVudW0geworICBQTF9VTklYX1RPVEFMU0laRSA9IDAsCisgIFBMX1VOSVhfRklMRVRZUEUsCisgIFBMX1VOSVhfUEVSTUlTU0lPTiwKKyAgUExfVU5JWF9ITElOS1MsCisgIFBMX1VOSVhfVVNFUiwKKyAgUExfVU5JWF9HUk9VUCwKKyAgUExfVU5JWF9TSVpFLAorICBQTF9VTklYX1RJTUUsCisgIFBMX1VOSVhfRklMRU5BTUUsCisgIFBMX1VOSVhfU1lNTElOSworfSBwbF91bml4X21haW5zdGF0ZTsKKwordHlwZWRlZiB1bmlvbiB7CisgIGVudW0geworICAgIFBMX1VOSVhfVE9UQUxTSVpFX0lOSVQgPSAwLAorICAgIFBMX1VOSVhfVE9UQUxTSVpFX1JFQURJTkcKKyAgfSB0b3RhbF9kaXJzaXplOworCisgIGVudW0geworICAgIFBMX1VOSVhfSExJTktTX1BSRVNQQUNFID0gMCwKKyAgICBQTF9VTklYX0hMSU5LU19OVU1CRVIKKyAgfSBobGlua3M7CisKKyAgZW51bSB7CisgICAgUExfVU5JWF9VU0VSX1BSRVNQQUNFID0gMCwKKyAgICBQTF9VTklYX1VTRVJfUEFSU0lORworICB9IHVzZXI7CisKKyAgZW51bSB7CisgICAgUExfVU5JWF9HUk9VUF9QUkVTUEFDRSA9IDAsCisgICAgUExfVU5JWF9HUk9VUF9OQU1FCisgIH0gZ3JvdXA7CisKKyAgZW51bSB7CisgICAgUExfVU5JWF9TSVpFX1BSRVNQQUNFID0gMCwKKyAgICBQTF9VTklYX1NJWkVfTlVNQkVSCisgIH0gc2l6ZTsKKworICBlbnVtIHsKKyAgICBQTF9VTklYX1RJTUVfUFJFUEFSVDEgPSAwLAorICAgIFBMX1VOSVhfVElNRV9QQVJUMSwKKyAgICBQTF9VTklYX1RJTUVfUFJFUEFSVDIsCisgICAgUExfVU5JWF9USU1FX1BBUlQyLAorICAgIFBMX1VOSVhfVElNRV9QUkVQQVJUMywKKyAgICBQTF9VTklYX1RJTUVfUEFSVDMKKyAgfSB0aW1lOworCisgIGVudW0geworICAgIFBMX1VOSVhfRklMRU5BTUVfUFJFU1BBQ0UgPSAwLAorICAgIFBMX1VOSVhfRklMRU5BTUVfTkFNRSwKKyAgICBQTF9VTklYX0ZJTEVOQU1FX1dJTkRPV1NFT0wKKyAgfSBmaWxlbmFtZTsKKworICBlbnVtIHsKKyAgICBQTF9VTklYX1NZTUxJTktfUFJFU1BBQ0UgPSAwLAorICAgIFBMX1VOSVhfU1lNTElOS19OQU1FLAorICAgIFBMX1VOSVhfU1lNTElOS19QUkVUQVJHRVQxLAorICAgIFBMX1VOSVhfU1lNTElOS19QUkVUQVJHRVQyLAorICAgIFBMX1VOSVhfU1lNTElOS19QUkVUQVJHRVQzLAorICAgIFBMX1VOSVhfU1lNTElOS19QUkVUQVJHRVQ0LAorICAgIFBMX1VOSVhfU1lNTElOS19UQVJHRVQsCisgICAgUExfVU5JWF9TWU1MSU5LX1dJTkRPV1NFT0wKKyAgfSBzeW1saW5rOworfSBwbF91bml4X3N1YnN0YXRlOworCit0eXBlZGVmIGVudW0geworICBQTF9XSU5OVF9EQVRFID0gMCwKKyAgUExfV0lOTlRfVElNRSwKKyAgUExfV0lOTlRfRElST1JTSVpFLAorICBQTF9XSU5OVF9GSUxFTkFNRQorfSBwbF93aW5OVF9tYWluc3RhdGU7CisKK3R5cGVkZWYgdW5pb24geworICBlbnVtIHsKKyAgICBQTF9XSU5OVF9USU1FX1BSRVNQQUNFID0gMCwKKyAgICBQTF9XSU5OVF9USU1FX1RJTUUKKyAgfSB0aW1lOworICBlbnVtIHsKKyAgICBQTF9XSU5OVF9ESVJPUlNJWkVfUFJFU1BBQ0UgPSAwLAorICAgIFBMX1dJTk5UX0RJUk9SU0laRV9DT05URU5UCisgIH0gZGlyb3JzaXplOworICBlbnVtIHsKKyAgICBQTF9XSU5OVF9GSUxFTkFNRV9QUkVTUEFDRSA9IDAsCisgICAgUExfV0lOTlRfRklMRU5BTUVfQ09OVEVOVCwKKyAgICBQTF9XSU5OVF9GSUxFTkFNRV9XSU5FT0wKKyAgfSBmaWxlbmFtZTsKK30gcGxfd2luTlRfc3Vic3RhdGU7CisKKy8qIFRoaXMgc3RydWN0IGlzIHVzZWQgaW4gd2lsZGNhcmQgZG93bmxvYWRpbmcgLSBmb3IgcGFyc2luZyBMSVNUIHJlc3BvbnNlICovCitzdHJ1Y3QgZnRwX3BhcnNlbGlzdF9kYXRhIHsKKyAgZW51bSB7CisgICAgT1NfVFlQRV9VTktOT1dOID0gMCwKKyAgICBPU19UWVBFX1VOSVgsCisgICAgT1NfVFlQRV9XSU5fTlQKKyAgfSBvc190eXBlOworCisgIHVuaW9uIHsKKyAgICBzdHJ1Y3QgeworICAgICAgcGxfdW5peF9tYWluc3RhdGUgbWFpbjsKKyAgICAgIHBsX3VuaXhfc3Vic3RhdGUgc3ViOworICAgIH0gVU5JWDsKKworICAgIHN0cnVjdCB7CisgICAgICBwbF93aW5OVF9tYWluc3RhdGUgbWFpbjsKKyAgICAgIHBsX3dpbk5UX3N1YnN0YXRlIHN1YjsKKyAgICB9IE5UOworICB9IHN0YXRlOworCisgIENVUkxjb2RlIGVycm9yOworICBzdHJ1Y3QgY3VybF9maWxlaW5mbyAqZmlsZV9kYXRhOworICB1bnNpZ25lZCBpbnQgaXRlbV9sZW5ndGg7CisgIHNpemVfdCBpdGVtX29mZnNldDsKKyAgc3RydWN0IHsKKyAgICBzaXplX3QgZmlsZW5hbWU7CisgICAgc2l6ZV90IHVzZXI7CisgICAgc2l6ZV90IGdyb3VwOworICAgIHNpemVfdCB0aW1lOworICAgIHNpemVfdCBwZXJtOworICAgIHNpemVfdCBzeW1saW5rX3RhcmdldDsKKyAgfSBvZmZzZXRzOworfTsKKworc3RydWN0IGZ0cF9wYXJzZWxpc3RfZGF0YSAqQ3VybF9mdHBfcGFyc2VsaXN0X2RhdGFfYWxsb2Modm9pZCkKK3sKKyAgcmV0dXJuIGNhbGxvYygxLCBzaXplb2Yoc3RydWN0IGZ0cF9wYXJzZWxpc3RfZGF0YSkpOworfQorCisKK3ZvaWQgQ3VybF9mdHBfcGFyc2VsaXN0X2RhdGFfZnJlZShzdHJ1Y3QgZnRwX3BhcnNlbGlzdF9kYXRhICoqcGxfZGF0YSkKK3sKKyAgaWYoKnBsX2RhdGEpCisgICAgZnJlZSgqcGxfZGF0YSk7CisgICpwbF9kYXRhID0gTlVMTDsKK30KKworCitDVVJMY29kZSBDdXJsX2Z0cF9wYXJzZWxpc3RfZ2V0ZXJyb3Ioc3RydWN0IGZ0cF9wYXJzZWxpc3RfZGF0YSAqcGxfZGF0YSkKK3sKKyAgcmV0dXJuIHBsX2RhdGEtPmVycm9yOworfQorCisKKyNkZWZpbmUgRlRQX0xQX01BTEZPUk1BVEVEX1BFUk0gMHgwMTAwMDAwMAorCitzdGF0aWMgaW50IGZ0cF9wbF9nZXRfcGVybWlzc2lvbihjb25zdCBjaGFyICpzdHIpCit7CisgIGludCBwZXJtaXNzaW9ucyA9IDA7CisgIC8qIFVTRVIgKi8KKyAgaWYoc3RyWzBdID09ICdyJykKKyAgICBwZXJtaXNzaW9ucyB8PSAxIDw8IDg7CisgIGVsc2UgaWYoc3RyWzBdICE9ICctJykKKyAgICBwZXJtaXNzaW9ucyB8PSBGVFBfTFBfTUFMRk9STUFURURfUEVSTTsKKyAgaWYoc3RyWzFdID09ICd3JykKKyAgICBwZXJtaXNzaW9ucyB8PSAxIDw8IDc7CisgIGVsc2UgaWYoc3RyWzFdICE9ICctJykKKyAgICBwZXJtaXNzaW9ucyB8PSBGVFBfTFBfTUFMRk9STUFURURfUEVSTTsKKworICBpZihzdHJbMl0gPT0gJ3gnKQorICAgIHBlcm1pc3Npb25zIHw9IDEgPDwgNjsKKyAgZWxzZSBpZihzdHJbMl0gPT0gJ3MnKSB7CisgICAgcGVybWlzc2lvbnMgfD0gMSA8PCA2OworICAgIHBlcm1pc3Npb25zIHw9IDEgPDwgMTE7CisgIH0KKyAgZWxzZSBpZihzdHJbMl0gPT0gJ1MnKQorICAgIHBlcm1pc3Npb25zIHw9IDEgPDwgMTE7CisgIGVsc2UgaWYoc3RyWzJdICE9ICctJykKKyAgICBwZXJtaXNzaW9ucyB8PSBGVFBfTFBfTUFMRk9STUFURURfUEVSTTsKKyAgLyogR1JPVVAgKi8KKyAgaWYoc3RyWzNdID09ICdyJykKKyAgICBwZXJtaXNzaW9ucyB8PSAxIDw8IDU7CisgIGVsc2UgaWYoc3RyWzNdICE9ICctJykKKyAgICBwZXJtaXNzaW9ucyB8PSBGVFBfTFBfTUFMRk9STUFURURfUEVSTTsKKyAgaWYoc3RyWzRdID09ICd3JykKKyAgICBwZXJtaXNzaW9ucyB8PSAxIDw8IDQ7CisgIGVsc2UgaWYoc3RyWzRdICE9ICctJykKKyAgICBwZXJtaXNzaW9ucyB8PSBGVFBfTFBfTUFMRk9STUFURURfUEVSTTsKKyAgaWYoc3RyWzVdID09ICd4JykKKyAgICBwZXJtaXNzaW9ucyB8PSAxIDw8IDM7CisgIGVsc2UgaWYoc3RyWzVdID09ICdzJykgeworICAgIHBlcm1pc3Npb25zIHw9IDEgPDwgMzsKKyAgICBwZXJtaXNzaW9ucyB8PSAxIDw8IDEwOworICB9CisgIGVsc2UgaWYoc3RyWzVdID09ICdTJykKKyAgICBwZXJtaXNzaW9ucyB8PSAxIDw8IDEwOworICBlbHNlIGlmKHN0cls1XSAhPSAnLScpCisgICAgcGVybWlzc2lvbnMgfD0gRlRQX0xQX01BTEZPUk1BVEVEX1BFUk07CisgIC8qIG90aGVycyAqLworICBpZihzdHJbNl0gPT0gJ3InKQorICAgIHBlcm1pc3Npb25zIHw9IDEgPDwgMjsKKyAgZWxzZSBpZihzdHJbNl0gIT0gJy0nKQorICAgIHBlcm1pc3Npb25zIHw9IEZUUF9MUF9NQUxGT1JNQVRFRF9QRVJNOworICBpZihzdHJbN10gPT0gJ3cnKQorICAgIHBlcm1pc3Npb25zIHw9IDEgPDwgMTsKKyAgZWxzZSBpZihzdHJbN10gIT0gJy0nKQorICAgICAgcGVybWlzc2lvbnMgfD0gRlRQX0xQX01BTEZPUk1BVEVEX1BFUk07CisgIGlmKHN0cls4XSA9PSAneCcpCisgICAgcGVybWlzc2lvbnMgfD0gMTsKKyAgZWxzZSBpZihzdHJbOF0gPT0gJ3QnKSB7CisgICAgcGVybWlzc2lvbnMgfD0gMTsKKyAgICBwZXJtaXNzaW9ucyB8PSAxIDw8IDk7CisgIH0KKyAgZWxzZSBpZihzdHJbOF0gPT0gJ1QnKQorICAgIHBlcm1pc3Npb25zIHw9IDEgPDwgOTsKKyAgZWxzZSBpZihzdHJbOF0gIT0gJy0nKQorICAgIHBlcm1pc3Npb25zIHw9IEZUUF9MUF9NQUxGT1JNQVRFRF9QRVJNOworCisgIHJldHVybiBwZXJtaXNzaW9uczsKK30KKworc3RhdGljIHZvaWQgUExfRVJST1Ioc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBDVVJMY29kZSBlcnIpCit7CisgIHN0cnVjdCBmdHBfd2NfdG1wZGF0YSAqdG1wZGF0YSA9IGNvbm4tPmRhdGEtPndpbGRjYXJkLnRtcDsKKyAgc3RydWN0IGZ0cF9wYXJzZWxpc3RfZGF0YSAqcGFyc2VyID0gdG1wZGF0YS0+cGFyc2VyOworICBpZihwYXJzZXItPmZpbGVfZGF0YSkKKyAgICBDdXJsX2ZpbGVpbmZvX2R0b3IoTlVMTCwgcGFyc2VyLT5maWxlX2RhdGEpOworICBwYXJzZXItPmZpbGVfZGF0YSA9IE5VTEw7CisgIHBhcnNlci0+ZXJyb3IgPSBlcnI7Cit9CisKK3N0YXRpYyBib29sIGZ0cF9wbF9nZXR0aW1lKHN0cnVjdCBmdHBfcGFyc2VsaXN0X2RhdGEgKnBhcnNlciwgY2hhciAqc3RyaW5nKQoreworICAodm9pZClwYXJzZXI7CisgICh2b2lkKXN0cmluZzsKKyAgLyogVE9ETworICAgKiBUaGVyZSBjb3VsZCBiZSBwb3NzaWJsZSBwYXJzZSB0aW1lc3RhbXAgZnJvbSBzZXJ2ZXIuIExlYXZpbmcgdW5pbXBsZW1lbnRlZAorICAgKiBmb3Igbm93LgorICAgKiBJZiB5b3Ugd2FudCBpbXBsZW1lbnQgdGhpcywgcGxlYXNlIGFkZCBDVVJMRklORk9GTEFHX0tOT1dOX1RJTUUgZmxhZyB0bworICAgKiBwYXJzZXItPmZpbGVfZGF0YS0+ZmxhZ3MKKyAgICoKKyAgICogRnRwIHNlcnZlcnMgYXJlIGdpdmluZyB1c3VhbGx5IHRoZXNlIGZvcm1hdHM6CisgICAqICBBcHIgMTEgIDE5OTggKHVua25vd24gdGltZS4uIHNldCBpdCB0byAwMDowMDowMD8pCisgICAqICBBcHIgMTEgMTI6MjEgKHVua25vd24geWVhciAtPiBzZXQgaXQgdG8gTk9XKCkgdGltZT8pCisgICAqICAwOC0wNS0wOSAgMDI6NDlQTSAgKG1zLWRvcyBmb3JtYXQpCisgICAqICAyMDEwMDQyMTA5MjUzOCAtPiBmb3IgTUxTVC9NTFNEIHJlc3BvbnNlCisgICAqLworCisgIHJldHVybiBGQUxTRTsKK30KKworc3RhdGljIENVUkxjb2RlIGZ0cF9wbF9pbnNlcnRfZmluZm8oc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGN1cmxfZmlsZWluZm8gKmZpbmZvKQoreworICBjdXJsX2ZubWF0Y2hfY2FsbGJhY2sgY29tcGFyZTsKKyAgc3RydWN0IFdpbGRjYXJkRGF0YSAqd2MgPSAmY29ubi0+ZGF0YS0+d2lsZGNhcmQ7CisgIHN0cnVjdCBmdHBfd2NfdG1wZGF0YSAqdG1wZGF0YSA9IHdjLT50bXA7CisgIHN0cnVjdCBjdXJsX2xsaXN0ICpsbGlzdCA9IHdjLT5maWxlbGlzdDsKKyAgc3RydWN0IGZ0cF9wYXJzZWxpc3RfZGF0YSAqcGFyc2VyID0gdG1wZGF0YS0+cGFyc2VyOworICBib29sIGFkZCA9IFRSVUU7CisKKyAgLyogbW92ZSBmaW5mbyBwb2ludGVycyB0byBiX2RhdGEgKi8KKyAgY2hhciAqc3RyID0gZmluZm8tPmJfZGF0YTsKKyAgZmluZm8tPmZpbGVuYW1lICAgICAgID0gc3RyICsgcGFyc2VyLT5vZmZzZXRzLmZpbGVuYW1lOworICBmaW5mby0+c3RyaW5ncy5ncm91cCAgPSBwYXJzZXItPm9mZnNldHMuZ3JvdXAgPworICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIgKyBwYXJzZXItPm9mZnNldHMuZ3JvdXAgOiBOVUxMOworICBmaW5mby0+c3RyaW5ncy5wZXJtICAgPSBwYXJzZXItPm9mZnNldHMucGVybSA/CisgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciArIHBhcnNlci0+b2Zmc2V0cy5wZXJtIDogTlVMTDsKKyAgZmluZm8tPnN0cmluZ3MudGFyZ2V0ID0gcGFyc2VyLT5vZmZzZXRzLnN5bWxpbmtfdGFyZ2V0ID8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyICsgcGFyc2VyLT5vZmZzZXRzLnN5bWxpbmtfdGFyZ2V0IDogTlVMTDsKKyAgZmluZm8tPnN0cmluZ3MudGltZSAgID0gc3RyICsgcGFyc2VyLT5vZmZzZXRzLnRpbWU7CisgIGZpbmZvLT5zdHJpbmdzLnVzZXIgICA9IHBhcnNlci0+b2Zmc2V0cy51c2VyID8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyICsgcGFyc2VyLT5vZmZzZXRzLnVzZXIgOiBOVUxMOworCisgIC8qIGdldCBjb3JyZWN0IGZubWF0Y2ggY2FsbGJhY2sgKi8KKyAgY29tcGFyZSA9IGNvbm4tPmRhdGEtPnNldC5mbm1hdGNoOworICBpZighY29tcGFyZSkKKyAgICBjb21wYXJlID0gQ3VybF9mbm1hdGNoOworCisgIC8qIGZpbHRlciBwYXR0ZXJuLWNvcnJlc3BvbmRpbmcgZmlsZW5hbWVzICovCisgIGlmKGNvbXBhcmUoY29ubi0+ZGF0YS0+c2V0LmZubWF0Y2hfZGF0YSwgd2MtPnBhdHRlcm4sIGZpbmZvLT5maWxlbmFtZSkgPT0gMCkgeworICAgIC8qIGRpc2NhcmQgc3ltbGluayB3aGljaCBpcyBjb250YWluaW5nIG11bHRpcGxlICIgLT4gIiAqLworICAgIGlmKChmaW5mby0+ZmlsZXR5cGUgPT0gQ1VSTEZJTEVUWVBFX1NZTUxJTkspICYmIGZpbmZvLT5zdHJpbmdzLnRhcmdldCAmJgorICAgICAgIChzdHJzdHIoZmluZm8tPnN0cmluZ3MudGFyZ2V0LCAiIC0+ICIpKSkgeworICAgICAgYWRkID0gRkFMU0U7CisgICAgfQorICB9CisgIGVsc2UgeworICAgIGFkZCA9IEZBTFNFOworICB9CisKKyAgaWYoYWRkKSB7CisgICAgaWYoIUN1cmxfbGxpc3RfaW5zZXJ0X25leHQobGxpc3QsIGxsaXN0LT50YWlsLCBmaW5mbykpIHsKKyAgICAgIEN1cmxfZmlsZWluZm9fZHRvcihOVUxMLCBmaW5mbyk7CisgICAgICB0bXBkYXRhLT5wYXJzZXItPmZpbGVfZGF0YSA9IE5VTEw7CisgICAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKKyAgICB9CisgIH0KKyAgZWxzZSB7CisgICAgQ3VybF9maWxlaW5mb19kdG9yKE5VTEwsIGZpbmZvKTsKKyAgfQorCisgIHRtcGRhdGEtPnBhcnNlci0+ZmlsZV9kYXRhID0gTlVMTDsKKyAgcmV0dXJuIENVUkxFX09LOworfQorCitzaXplX3QgQ3VybF9mdHBfcGFyc2VsaXN0KGNoYXIgKmJ1ZmZlciwgc2l6ZV90IHNpemUsIHNpemVfdCBubWVtYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqY29ubnB0cikKK3sKKyAgc2l6ZV90IGJ1ZmZsZW4gPSBzaXplKm5tZW1iOworICBzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4gPSAoc3RydWN0IGNvbm5lY3RkYXRhICopY29ubnB0cjsKKyAgc3RydWN0IGZ0cF93Y190bXBkYXRhICp0bXBkYXRhID0gY29ubi0+ZGF0YS0+d2lsZGNhcmQudG1wOworICBzdHJ1Y3QgZnRwX3BhcnNlbGlzdF9kYXRhICpwYXJzZXIgPSB0bXBkYXRhLT5wYXJzZXI7CisgIHN0cnVjdCBjdXJsX2ZpbGVpbmZvICpmaW5mbzsKKyAgdW5zaWduZWQgbG9uZyBpID0gMDsKKyAgQ1VSTGNvZGUgcmM7CisKKyAgaWYocGFyc2VyLT5lcnJvcikgeyAvKiBlcnJvciBpbiBwcmV2aW91cyBjYWxsICovCisgICAgLyogc2NlbmFyaW86CisgICAgICogMS4gY2FsbCA9PiBPSy4uCisgICAgICogMi4gY2FsbCA9PiBPVVRfT0ZfTUVNT1JZIChvciBvdGhlciBlcnJvcikKKyAgICAgKiAzLiAobGFzdCkgY2FsbCA9PiBpcyBza2lwcGVkIFJJR0hUIEhFUkUgYW5kIHRoZSBlcnJvciBpcyBoYWRsZWQgbGF0ZXIKKyAgICAgKiAgICBpbiB3Y19zdGF0ZW1hY2goKQorICAgICAqLworICAgIHJldHVybiBidWZmbGVuOworICB9CisKKyAgaWYocGFyc2VyLT5vc190eXBlID09IE9TX1RZUEVfVU5LTk9XTiAmJiBidWZmbGVuID4gMCkgeworICAgIC8qIGNvbnNpZGVyaW5nIGluZm8gYWJvdXQgRklMRSByZXNwb25zZSBmb3JtYXQgKi8KKyAgICBwYXJzZXItPm9zX3R5cGUgPSAoYnVmZmVyWzBdID49ICcwJyAmJiBidWZmZXJbMF0gPD0gJzknKSA/CisgICAgICAgICAgICAgICAgICAgICAgIE9TX1RZUEVfV0lOX05UIDogT1NfVFlQRV9VTklYOworICB9CisKKyAgd2hpbGUoaSA8IGJ1ZmZsZW4pIHsgLyogRlNNICovCisKKyAgICBjaGFyIGMgPSBidWZmZXJbaV07CisgICAgaWYoIXBhcnNlci0+ZmlsZV9kYXRhKSB7IC8qIHRtcCBmaWxlIGRhdGEgaXMgbm90IGFsbG9jYXRlZCB5ZXQgKi8KKyAgICAgIHBhcnNlci0+ZmlsZV9kYXRhID0gQ3VybF9maWxlaW5mb19hbGxvYygpOworICAgICAgaWYoIXBhcnNlci0+ZmlsZV9kYXRhKSB7CisgICAgICAgIHBhcnNlci0+ZXJyb3IgPSBDVVJMRV9PVVRfT0ZfTUVNT1JZOworICAgICAgICByZXR1cm4gYnVmZmxlbjsKKyAgICAgIH0KKyAgICAgIHBhcnNlci0+ZmlsZV9kYXRhLT5iX2RhdGEgPSBtYWxsb2MoRlRQX0JVRkZFUl9BTExPQ1NJWkUpOworICAgICAgaWYoIXBhcnNlci0+ZmlsZV9kYXRhLT5iX2RhdGEpIHsKKyAgICAgICAgUExfRVJST1IoY29ubiwgQ1VSTEVfT1VUX09GX01FTU9SWSk7CisgICAgICAgIHJldHVybiBidWZmbGVuOworICAgICAgfQorICAgICAgcGFyc2VyLT5maWxlX2RhdGEtPmJfc2l6ZSA9IEZUUF9CVUZGRVJfQUxMT0NTSVpFOworICAgICAgcGFyc2VyLT5pdGVtX29mZnNldCA9IDA7CisgICAgICBwYXJzZXItPml0ZW1fbGVuZ3RoID0gMDsKKyAgICB9CisKKyAgICBmaW5mbyA9IHBhcnNlci0+ZmlsZV9kYXRhOworICAgIGZpbmZvLT5iX2RhdGFbZmluZm8tPmJfdXNlZCsrXSA9IGM7CisKKyAgICBpZihmaW5mby0+Yl91c2VkID49IGZpbmZvLT5iX3NpemUgLSAxKSB7CisgICAgICAvKiBpZiBpdCBpcyBpbXBvcnRhbnQsIGV4dGVuZCBidWZmZXIgc3BhY2UgZm9yIGZpbGUgZGF0YSAqLworICAgICAgY2hhciAqdG1wID0gcmVhbGxvYyhmaW5mby0+Yl9kYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5mby0+Yl9zaXplICsgRlRQX0JVRkZFUl9BTExPQ1NJWkUpOworICAgICAgaWYodG1wKSB7CisgICAgICAgIGZpbmZvLT5iX3NpemUgKz0gRlRQX0JVRkZFUl9BTExPQ1NJWkU7CisgICAgICAgIGZpbmZvLT5iX2RhdGEgPSB0bXA7CisgICAgICB9CisgICAgICBlbHNlIHsKKyAgICAgICAgQ3VybF9maWxlaW5mb19kdG9yKE5VTEwsIHBhcnNlci0+ZmlsZV9kYXRhKTsKKyAgICAgICAgcGFyc2VyLT5maWxlX2RhdGEgPSBOVUxMOworICAgICAgICBwYXJzZXItPmVycm9yID0gQ1VSTEVfT1VUX09GX01FTU9SWTsKKyAgICAgICAgUExfRVJST1IoY29ubiwgQ1VSTEVfT1VUX09GX01FTU9SWSk7CisgICAgICAgIHJldHVybiBidWZmbGVuOworICAgICAgfQorICAgIH0KKworICAgIHN3aXRjaCAocGFyc2VyLT5vc190eXBlKSB7CisgICAgY2FzZSBPU19UWVBFX1VOSVg6CisgICAgICBzd2l0Y2ggKHBhcnNlci0+c3RhdGUuVU5JWC5tYWluKSB7CisgICAgICBjYXNlIFBMX1VOSVhfVE9UQUxTSVpFOgorICAgICAgICBzd2l0Y2gocGFyc2VyLT5zdGF0ZS5VTklYLnN1Yi50b3RhbF9kaXJzaXplKSB7CisgICAgICAgIGNhc2UgUExfVU5JWF9UT1RBTFNJWkVfSU5JVDoKKyAgICAgICAgICBpZihjID09ICd0JykgeworICAgICAgICAgICAgcGFyc2VyLT5zdGF0ZS5VTklYLnN1Yi50b3RhbF9kaXJzaXplID0gUExfVU5JWF9UT1RBTFNJWkVfUkVBRElORzsKKyAgICAgICAgICAgIHBhcnNlci0+aXRlbV9sZW5ndGgrKzsKKyAgICAgICAgICB9CisgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBwYXJzZXItPnN0YXRlLlVOSVgubWFpbiA9IFBMX1VOSVhfRklMRVRZUEU7CisgICAgICAgICAgICAvKiBzdGFydCBGU00gYWdhaW4gbm90IGNvbnNpZGVyaW5nIHNpemUgb2YgZGlyZWN0b3J5ICovCisgICAgICAgICAgICBmaW5mby0+Yl91c2VkID0gMDsKKyAgICAgICAgICAgIGktLTsKKyAgICAgICAgICB9CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUExfVU5JWF9UT1RBTFNJWkVfUkVBRElORzoKKyAgICAgICAgICBwYXJzZXItPml0ZW1fbGVuZ3RoKys7CisgICAgICAgICAgaWYoYyA9PSAnXHInKSB7CisgICAgICAgICAgICBwYXJzZXItPml0ZW1fbGVuZ3RoLS07CisgICAgICAgICAgICBmaW5mby0+Yl91c2VkLS07CisgICAgICAgICAgfQorICAgICAgICAgIGVsc2UgaWYoYyA9PSAnXG4nKSB7CisgICAgICAgICAgICBmaW5mby0+Yl9kYXRhW3BhcnNlci0+aXRlbV9sZW5ndGggLSAxXSA9IDA7CisgICAgICAgICAgICBpZihzdHJuY21wKCJ0b3RhbCAiLCBmaW5mby0+Yl9kYXRhLCA2KSA9PSAwKSB7CisgICAgICAgICAgICAgIGNoYXIgKmVuZHB0ciA9IE5VTEw7CisgICAgICAgICAgICAgIC8qIGhlcmUgd2UgY2FuIGRlYWwgd2l0aCBkaXJlY3Rvcnkgc2l6ZSAqLworICAgICAgICAgICAgICBjdXJseF9zdHJ0b29mZnQoZmluZm8tPmJfZGF0YSs2LCAmZW5kcHRyLCAxMCk7CisgICAgICAgICAgICAgIGlmKCplbmRwdHIgIT0gMCkgeworICAgICAgICAgICAgICAgIFBMX0VSUk9SKGNvbm4sIENVUkxFX0ZUUF9CQURfRklMRV9MSVNUKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gYnVmZmxlbjsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBwYXJzZXItPnN0YXRlLlVOSVgubWFpbiA9IFBMX1VOSVhfRklMRVRZUEU7CisgICAgICAgICAgICAgICAgZmluZm8tPmJfdXNlZCA9IDA7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICBQTF9FUlJPUihjb25uLCBDVVJMRV9GVFBfQkFEX0ZJTEVfTElTVCk7CisgICAgICAgICAgICAgIHJldHVybiBidWZmbGVuOworICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgUExfVU5JWF9GSUxFVFlQRToKKyAgICAgICAgc3dpdGNoIChjKSB7CisgICAgICAgIGNhc2UgJy0nOgorICAgICAgICAgIGZpbmZvLT5maWxldHlwZSA9IENVUkxGSUxFVFlQRV9GSUxFOworICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICdkJzoKKyAgICAgICAgICBmaW5mby0+ZmlsZXR5cGUgPSBDVVJMRklMRVRZUEVfRElSRUNUT1JZOworICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICdsJzoKKyAgICAgICAgICBmaW5mby0+ZmlsZXR5cGUgPSBDVVJMRklMRVRZUEVfU1lNTElOSzsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAncCc6CisgICAgICAgICAgZmluZm8tPmZpbGV0eXBlID0gQ1VSTEZJTEVUWVBFX05BTUVEUElQRTsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAncyc6CisgICAgICAgICAgZmluZm8tPmZpbGV0eXBlID0gQ1VSTEZJTEVUWVBFX1NPQ0tFVDsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAnYyc6CisgICAgICAgICAgZmluZm8tPmZpbGV0eXBlID0gQ1VSTEZJTEVUWVBFX0RFVklDRV9DSEFSOworICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICdiJzoKKyAgICAgICAgICBmaW5mby0+ZmlsZXR5cGUgPSBDVVJMRklMRVRZUEVfREVWSUNFX0JMT0NLOworICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICdEJzoKKyAgICAgICAgICBmaW5mby0+ZmlsZXR5cGUgPSBDVVJMRklMRVRZUEVfRE9PUjsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICBQTF9FUlJPUihjb25uLCBDVVJMRV9GVFBfQkFEX0ZJTEVfTElTVCk7CisgICAgICAgICAgcmV0dXJuIGJ1ZmZsZW47CisgICAgICAgIH0KKyAgICAgICAgcGFyc2VyLT5zdGF0ZS5VTklYLm1haW4gPSBQTF9VTklYX1BFUk1JU1NJT047CisgICAgICAgIHBhcnNlci0+aXRlbV9sZW5ndGggPSAwOworICAgICAgICBwYXJzZXItPml0ZW1fb2Zmc2V0ID0gMTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIFBMX1VOSVhfUEVSTUlTU0lPTjoKKyAgICAgICAgcGFyc2VyLT5pdGVtX2xlbmd0aCsrOworICAgICAgICBpZihwYXJzZXItPml0ZW1fbGVuZ3RoIDw9IDkpIHsKKyAgICAgICAgICBpZighc3RyY2hyKCJyd3gtdFRzUyIsIGMpKSB7CisgICAgICAgICAgICBQTF9FUlJPUihjb25uLCBDVVJMRV9GVFBfQkFEX0ZJTEVfTElTVCk7CisgICAgICAgICAgICByZXR1cm4gYnVmZmxlbjsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZihwYXJzZXItPml0ZW1fbGVuZ3RoID09IDEwKSB7CisgICAgICAgICAgdW5zaWduZWQgaW50IHBlcm07CisgICAgICAgICAgaWYoYyAhPSAnICcpIHsKKyAgICAgICAgICAgIFBMX0VSUk9SKGNvbm4sIENVUkxFX0ZUUF9CQURfRklMRV9MSVNUKTsKKyAgICAgICAgICAgIHJldHVybiBidWZmbGVuOworICAgICAgICAgIH0KKyAgICAgICAgICBmaW5mby0+Yl9kYXRhWzEwXSA9IDA7IC8qIHRlcm1pbmF0ZSBwZXJtaXNzaW9ucyAqLworICAgICAgICAgIHBlcm0gPSBmdHBfcGxfZ2V0X3Blcm1pc3Npb24oZmluZm8tPmJfZGF0YSArIHBhcnNlci0+aXRlbV9vZmZzZXQpOworICAgICAgICAgIGlmKHBlcm0gJiBGVFBfTFBfTUFMRk9STUFURURfUEVSTSkgeworICAgICAgICAgICAgUExfRVJST1IoY29ubiwgQ1VSTEVfRlRQX0JBRF9GSUxFX0xJU1QpOworICAgICAgICAgICAgcmV0dXJuIGJ1ZmZsZW47CisgICAgICAgICAgfQorICAgICAgICAgIHBhcnNlci0+ZmlsZV9kYXRhLT5mbGFncyB8PSBDVVJMRklORk9GTEFHX0tOT1dOX1BFUk07CisgICAgICAgICAgcGFyc2VyLT5maWxlX2RhdGEtPnBlcm0gPSBwZXJtOworICAgICAgICAgIHBhcnNlci0+b2Zmc2V0cy5wZXJtID0gcGFyc2VyLT5pdGVtX29mZnNldDsKKworICAgICAgICAgIHBhcnNlci0+aXRlbV9sZW5ndGggPSAwOworICAgICAgICAgIHBhcnNlci0+c3RhdGUuVU5JWC5tYWluID0gUExfVU5JWF9ITElOS1M7CisgICAgICAgICAgcGFyc2VyLT5zdGF0ZS5VTklYLnN1Yi5obGlua3MgPSBQTF9VTklYX0hMSU5LU19QUkVTUEFDRTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgUExfVU5JWF9ITElOS1M6CisgICAgICAgIHN3aXRjaChwYXJzZXItPnN0YXRlLlVOSVguc3ViLmhsaW5rcykgeworICAgICAgICBjYXNlIFBMX1VOSVhfSExJTktTX1BSRVNQQUNFOgorICAgICAgICAgIGlmKGMgIT0gJyAnKSB7CisgICAgICAgICAgICBpZihjID49ICcwJyAmJiBjIDw9ICc5JykgeworICAgICAgICAgICAgICBwYXJzZXItPml0ZW1fb2Zmc2V0ID0gZmluZm8tPmJfdXNlZCAtIDE7CisgICAgICAgICAgICAgIHBhcnNlci0+aXRlbV9sZW5ndGggPSAxOworICAgICAgICAgICAgICBwYXJzZXItPnN0YXRlLlVOSVguc3ViLmhsaW5rcyA9IFBMX1VOSVhfSExJTktTX05VTUJFUjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICBQTF9FUlJPUihjb25uLCBDVVJMRV9GVFBfQkFEX0ZJTEVfTElTVCk7CisgICAgICAgICAgICAgIHJldHVybiBidWZmbGVuOworICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBQTF9VTklYX0hMSU5LU19OVU1CRVI6CisgICAgICAgICAgcGFyc2VyLT5pdGVtX2xlbmd0aCArKzsKKyAgICAgICAgICBpZihjID09ICcgJykgeworICAgICAgICAgICAgY2hhciAqcDsKKyAgICAgICAgICAgIGxvbmcgaW50IGhsaW5rczsKKyAgICAgICAgICAgIGZpbmZvLT5iX2RhdGFbcGFyc2VyLT5pdGVtX29mZnNldCArIHBhcnNlci0+aXRlbV9sZW5ndGggLSAxXSA9IDA7CisgICAgICAgICAgICBobGlua3MgPSBzdHJ0b2woZmluZm8tPmJfZGF0YSArIHBhcnNlci0+aXRlbV9vZmZzZXQsICZwLCAxMCk7CisgICAgICAgICAgICBpZihwWzBdID09ICdcMCcgJiYgaGxpbmtzICE9IExPTkdfTUFYICYmIGhsaW5rcyAhPSBMT05HX01JTikgeworICAgICAgICAgICAgICBwYXJzZXItPmZpbGVfZGF0YS0+ZmxhZ3MgfD0gQ1VSTEZJTkZPRkxBR19LTk9XTl9ITElOS0NPVU5UOworICAgICAgICAgICAgICBwYXJzZXItPmZpbGVfZGF0YS0+aGFyZGxpbmtzID0gaGxpbmtzOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcGFyc2VyLT5pdGVtX2xlbmd0aCA9IDA7CisgICAgICAgICAgICBwYXJzZXItPml0ZW1fb2Zmc2V0ID0gMDsKKyAgICAgICAgICAgIHBhcnNlci0+c3RhdGUuVU5JWC5tYWluID0gUExfVU5JWF9VU0VSOworICAgICAgICAgICAgcGFyc2VyLT5zdGF0ZS5VTklYLnN1Yi51c2VyID0gUExfVU5JWF9VU0VSX1BSRVNQQUNFOworICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlIGlmKGMgPCAnMCcgfHwgYyA+ICc5JykgeworICAgICAgICAgICAgUExfRVJST1IoY29ubiwgQ1VSTEVfRlRQX0JBRF9GSUxFX0xJU1QpOworICAgICAgICAgICAgcmV0dXJuIGJ1ZmZsZW47CisgICAgICAgICAgfQorICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBQTF9VTklYX1VTRVI6CisgICAgICAgIHN3aXRjaChwYXJzZXItPnN0YXRlLlVOSVguc3ViLnVzZXIpIHsKKyAgICAgICAgY2FzZSBQTF9VTklYX1VTRVJfUFJFU1BBQ0U6CisgICAgICAgICAgaWYoYyAhPSAnICcpIHsKKyAgICAgICAgICAgIHBhcnNlci0+aXRlbV9vZmZzZXQgPSBmaW5mby0+Yl91c2VkIC0gMTsKKyAgICAgICAgICAgIHBhcnNlci0+aXRlbV9sZW5ndGggPSAxOworICAgICAgICAgICAgcGFyc2VyLT5zdGF0ZS5VTklYLnN1Yi51c2VyID0gUExfVU5JWF9VU0VSX1BBUlNJTkc7CisgICAgICAgICAgfQorICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFBMX1VOSVhfVVNFUl9QQVJTSU5HOgorICAgICAgICAgIHBhcnNlci0+aXRlbV9sZW5ndGgrKzsKKyAgICAgICAgICBpZihjID09ICcgJykgeworICAgICAgICAgICAgZmluZm8tPmJfZGF0YVtwYXJzZXItPml0ZW1fb2Zmc2V0ICsgcGFyc2VyLT5pdGVtX2xlbmd0aCAtIDFdID0gMDsKKyAgICAgICAgICAgIHBhcnNlci0+b2Zmc2V0cy51c2VyID0gcGFyc2VyLT5pdGVtX29mZnNldDsKKyAgICAgICAgICAgIHBhcnNlci0+c3RhdGUuVU5JWC5tYWluID0gUExfVU5JWF9HUk9VUDsKKyAgICAgICAgICAgIHBhcnNlci0+c3RhdGUuVU5JWC5zdWIuZ3JvdXAgPSBQTF9VTklYX0dST1VQX1BSRVNQQUNFOworICAgICAgICAgICAgcGFyc2VyLT5pdGVtX29mZnNldCA9IDA7CisgICAgICAgICAgICBwYXJzZXItPml0ZW1fbGVuZ3RoID0gMDsKKyAgICAgICAgICB9CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIFBMX1VOSVhfR1JPVVA6CisgICAgICAgIHN3aXRjaChwYXJzZXItPnN0YXRlLlVOSVguc3ViLmdyb3VwKSB7CisgICAgICAgIGNhc2UgUExfVU5JWF9HUk9VUF9QUkVTUEFDRToKKyAgICAgICAgICBpZihjICE9ICcgJykgeworICAgICAgICAgICAgcGFyc2VyLT5pdGVtX29mZnNldCA9IGZpbmZvLT5iX3VzZWQgLSAxOworICAgICAgICAgICAgcGFyc2VyLT5pdGVtX2xlbmd0aCA9IDE7CisgICAgICAgICAgICBwYXJzZXItPnN0YXRlLlVOSVguc3ViLmdyb3VwID0gUExfVU5JWF9HUk9VUF9OQU1FOworICAgICAgICAgIH0KKyAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBQTF9VTklYX0dST1VQX05BTUU6CisgICAgICAgICAgcGFyc2VyLT5pdGVtX2xlbmd0aCsrOworICAgICAgICAgIGlmKGMgPT0gJyAnKSB7CisgICAgICAgICAgICBmaW5mby0+Yl9kYXRhW3BhcnNlci0+aXRlbV9vZmZzZXQgKyBwYXJzZXItPml0ZW1fbGVuZ3RoIC0gMV0gPSAwOworICAgICAgICAgICAgcGFyc2VyLT5vZmZzZXRzLmdyb3VwID0gcGFyc2VyLT5pdGVtX29mZnNldDsKKyAgICAgICAgICAgIHBhcnNlci0+c3RhdGUuVU5JWC5tYWluID0gUExfVU5JWF9TSVpFOworICAgICAgICAgICAgcGFyc2VyLT5zdGF0ZS5VTklYLnN1Yi5zaXplID0gUExfVU5JWF9TSVpFX1BSRVNQQUNFOworICAgICAgICAgICAgcGFyc2VyLT5pdGVtX29mZnNldCA9IDA7CisgICAgICAgICAgICBwYXJzZXItPml0ZW1fbGVuZ3RoID0gMDsKKyAgICAgICAgICB9CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIFBMX1VOSVhfU0laRToKKyAgICAgICAgc3dpdGNoKHBhcnNlci0+c3RhdGUuVU5JWC5zdWIuc2l6ZSkgeworICAgICAgICBjYXNlIFBMX1VOSVhfU0laRV9QUkVTUEFDRToKKyAgICAgICAgICBpZihjICE9ICcgJykgeworICAgICAgICAgICAgaWYoYyA+PSAnMCcgJiYgYyA8PSAnOScpIHsKKyAgICAgICAgICAgICAgcGFyc2VyLT5pdGVtX29mZnNldCA9IGZpbmZvLT5iX3VzZWQgLSAxOworICAgICAgICAgICAgICBwYXJzZXItPml0ZW1fbGVuZ3RoID0gMTsKKyAgICAgICAgICAgICAgcGFyc2VyLT5zdGF0ZS5VTklYLnN1Yi5zaXplID0gUExfVU5JWF9TSVpFX05VTUJFUjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICBQTF9FUlJPUihjb25uLCBDVVJMRV9GVFBfQkFEX0ZJTEVfTElTVCk7CisgICAgICAgICAgICAgIHJldHVybiBidWZmbGVuOworICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBQTF9VTklYX1NJWkVfTlVNQkVSOgorICAgICAgICAgIHBhcnNlci0+aXRlbV9sZW5ndGgrKzsKKyAgICAgICAgICBpZihjID09ICcgJykgeworICAgICAgICAgICAgY2hhciAqcDsKKyAgICAgICAgICAgIGN1cmxfb2ZmX3QgZnNpemU7CisgICAgICAgICAgICBmaW5mby0+Yl9kYXRhW3BhcnNlci0+aXRlbV9vZmZzZXQgKyBwYXJzZXItPml0ZW1fbGVuZ3RoIC0gMV0gPSAwOworICAgICAgICAgICAgZnNpemUgPSBjdXJseF9zdHJ0b29mZnQoZmluZm8tPmJfZGF0YStwYXJzZXItPml0ZW1fb2Zmc2V0LCAmcCwgMTApOworICAgICAgICAgICAgaWYocFswXSA9PSAnXDAnICYmIGZzaXplICE9IENVUkxfT0ZGX1RfTUFYICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnNpemUgIT0gQ1VSTF9PRkZfVF9NSU4pIHsKKyAgICAgICAgICAgICAgcGFyc2VyLT5maWxlX2RhdGEtPmZsYWdzIHw9IENVUkxGSU5GT0ZMQUdfS05PV05fU0laRTsKKyAgICAgICAgICAgICAgcGFyc2VyLT5maWxlX2RhdGEtPnNpemUgPSBmc2l6ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHBhcnNlci0+aXRlbV9sZW5ndGggPSAwOworICAgICAgICAgICAgcGFyc2VyLT5pdGVtX29mZnNldCA9IDA7CisgICAgICAgICAgICBwYXJzZXItPnN0YXRlLlVOSVgubWFpbiA9IFBMX1VOSVhfVElNRTsKKyAgICAgICAgICAgIHBhcnNlci0+c3RhdGUuVU5JWC5zdWIudGltZSA9IFBMX1VOSVhfVElNRV9QUkVQQVJUMTsKKyAgICAgICAgICB9CisgICAgICAgICAgZWxzZSBpZiAoIUlTRElHSVQoYykpIHsKKyAgICAgICAgICAgIFBMX0VSUk9SKGNvbm4sIENVUkxFX0ZUUF9CQURfRklMRV9MSVNUKTsKKyAgICAgICAgICAgIHJldHVybiBidWZmbGVuOworICAgICAgICAgIH0KKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgUExfVU5JWF9USU1FOgorICAgICAgICBzd2l0Y2gocGFyc2VyLT5zdGF0ZS5VTklYLnN1Yi50aW1lKSB7CisgICAgICAgIGNhc2UgUExfVU5JWF9USU1FX1BSRVBBUlQxOgorICAgICAgICAgIGlmKGMgIT0gJyAnKSB7CisgICAgICAgICAgICBpZihJU0FMTlVNKGMpKSB7CisgICAgICAgICAgICAgIHBhcnNlci0+aXRlbV9vZmZzZXQgPSBmaW5mby0+Yl91c2VkIC0xOworICAgICAgICAgICAgICBwYXJzZXItPml0ZW1fbGVuZ3RoID0gMTsKKyAgICAgICAgICAgICAgcGFyc2VyLT5zdGF0ZS5VTklYLnN1Yi50aW1lID0gUExfVU5JWF9USU1FX1BBUlQxOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgIFBMX0VSUk9SKGNvbm4sIENVUkxFX0ZUUF9CQURfRklMRV9MSVNUKTsKKyAgICAgICAgICAgICAgcmV0dXJuIGJ1ZmZsZW47CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFBMX1VOSVhfVElNRV9QQVJUMToKKyAgICAgICAgICBwYXJzZXItPml0ZW1fbGVuZ3RoKys7CisgICAgICAgICAgaWYoYyA9PSAnICcpIHsKKyAgICAgICAgICAgIHBhcnNlci0+c3RhdGUuVU5JWC5zdWIudGltZSA9IFBMX1VOSVhfVElNRV9QUkVQQVJUMjsKKyAgICAgICAgICB9CisgICAgICAgICAgZWxzZSBpZighSVNBTE5VTShjKSAmJiBjICE9ICcuJykgeworICAgICAgICAgICAgUExfRVJST1IoY29ubiwgQ1VSTEVfRlRQX0JBRF9GSUxFX0xJU1QpOworICAgICAgICAgICAgcmV0dXJuIGJ1ZmZsZW47CisgICAgICAgICAgfQorICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFBMX1VOSVhfVElNRV9QUkVQQVJUMjoKKyAgICAgICAgICBwYXJzZXItPml0ZW1fbGVuZ3RoKys7CisgICAgICAgICAgaWYoYyAhPSAnICcpIHsKKyAgICAgICAgICAgIGlmKElTQUxOVU0oYykpIHsKKyAgICAgICAgICAgICAgcGFyc2VyLT5zdGF0ZS5VTklYLnN1Yi50aW1lID0gUExfVU5JWF9USU1FX1BBUlQyOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgIFBMX0VSUk9SKGNvbm4sIENVUkxFX0ZUUF9CQURfRklMRV9MSVNUKTsKKyAgICAgICAgICAgICAgcmV0dXJuIGJ1ZmZsZW47CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFBMX1VOSVhfVElNRV9QQVJUMjoKKyAgICAgICAgICBwYXJzZXItPml0ZW1fbGVuZ3RoKys7CisgICAgICAgICAgaWYoYyA9PSAnICcpIHsKKyAgICAgICAgICAgIHBhcnNlci0+c3RhdGUuVU5JWC5zdWIudGltZSA9IFBMX1VOSVhfVElNRV9QUkVQQVJUMzsKKyAgICAgICAgICB9CisgICAgICAgICAgZWxzZSBpZighSVNBTE5VTShjKSAmJiBjICE9ICcuJykgeworICAgICAgICAgICAgUExfRVJST1IoY29ubiwgQ1VSTEVfRlRQX0JBRF9GSUxFX0xJU1QpOworICAgICAgICAgICAgcmV0dXJuIGJ1ZmZsZW47CisgICAgICAgICAgfQorICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFBMX1VOSVhfVElNRV9QUkVQQVJUMzoKKyAgICAgICAgICBwYXJzZXItPml0ZW1fbGVuZ3RoKys7CisgICAgICAgICAgaWYoYyAhPSAnICcpIHsKKyAgICAgICAgICAgIGlmKElTQUxOVU0oYykpIHsKKyAgICAgICAgICAgICAgcGFyc2VyLT5zdGF0ZS5VTklYLnN1Yi50aW1lID0gUExfVU5JWF9USU1FX1BBUlQzOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgIFBMX0VSUk9SKGNvbm4sIENVUkxFX0ZUUF9CQURfRklMRV9MSVNUKTsKKyAgICAgICAgICAgICAgcmV0dXJuIGJ1ZmZsZW47CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFBMX1VOSVhfVElNRV9QQVJUMzoKKyAgICAgICAgICBwYXJzZXItPml0ZW1fbGVuZ3RoKys7CisgICAgICAgICAgaWYoYyA9PSAnICcpIHsKKyAgICAgICAgICAgIGZpbmZvLT5iX2RhdGFbcGFyc2VyLT5pdGVtX29mZnNldCArIHBhcnNlci0+aXRlbV9sZW5ndGggLTFdID0gMDsKKyAgICAgICAgICAgIHBhcnNlci0+b2Zmc2V0cy50aW1lID0gcGFyc2VyLT5pdGVtX29mZnNldDsKKyAgICAgICAgICAgIGlmKGZ0cF9wbF9nZXR0aW1lKHBhcnNlciwgZmluZm8tPmJfZGF0YSArIHBhcnNlci0+aXRlbV9vZmZzZXQpKSB7CisgICAgICAgICAgICAgIHBhcnNlci0+ZmlsZV9kYXRhLT5mbGFncyB8PSBDVVJMRklORk9GTEFHX0tOT1dOX1RJTUU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZihmaW5mby0+ZmlsZXR5cGUgPT0gQ1VSTEZJTEVUWVBFX1NZTUxJTkspIHsKKyAgICAgICAgICAgICAgcGFyc2VyLT5zdGF0ZS5VTklYLm1haW4gPSBQTF9VTklYX1NZTUxJTks7CisgICAgICAgICAgICAgIHBhcnNlci0+c3RhdGUuVU5JWC5zdWIuc3ltbGluayA9IFBMX1VOSVhfU1lNTElOS19QUkVTUEFDRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICBwYXJzZXItPnN0YXRlLlVOSVgubWFpbiA9IFBMX1VOSVhfRklMRU5BTUU7CisgICAgICAgICAgICAgIHBhcnNlci0+c3RhdGUuVU5JWC5zdWIuZmlsZW5hbWUgPSBQTF9VTklYX0ZJTEVOQU1FX1BSRVNQQUNFOworICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlIGlmKCFJU0FMTlVNKGMpICYmIGMgIT0gJy4nICYmIGMgIT0gJzonKSB7CisgICAgICAgICAgICBQTF9FUlJPUihjb25uLCBDVVJMRV9GVFBfQkFEX0ZJTEVfTElTVCk7CisgICAgICAgICAgICByZXR1cm4gYnVmZmxlbjsKKyAgICAgICAgICB9CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIFBMX1VOSVhfRklMRU5BTUU6CisgICAgICAgIHN3aXRjaChwYXJzZXItPnN0YXRlLlVOSVguc3ViLmZpbGVuYW1lKSB7CisgICAgICAgIGNhc2UgUExfVU5JWF9GSUxFTkFNRV9QUkVTUEFDRToKKyAgICAgICAgICBpZihjICE9ICcgJykgeworICAgICAgICAgICAgcGFyc2VyLT5pdGVtX29mZnNldCA9IGZpbmZvLT5iX3VzZWQgLSAxOworICAgICAgICAgICAgcGFyc2VyLT5pdGVtX2xlbmd0aCA9IDE7CisgICAgICAgICAgICBwYXJzZXItPnN0YXRlLlVOSVguc3ViLmZpbGVuYW1lID0gUExfVU5JWF9GSUxFTkFNRV9OQU1FOworICAgICAgICAgIH0KKyAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBQTF9VTklYX0ZJTEVOQU1FX05BTUU6CisgICAgICAgICAgcGFyc2VyLT5pdGVtX2xlbmd0aCsrOworICAgICAgICAgIGlmKGMgPT0gJ1xyJykgeworICAgICAgICAgICAgcGFyc2VyLT5pdGVtX2xlbmd0aC0tOworICAgICAgICAgICAgcGFyc2VyLT5zdGF0ZS5VTklYLnN1Yi5maWxlbmFtZSA9IFBMX1VOSVhfRklMRU5BTUVfV0lORE9XU0VPTDsKKyAgICAgICAgICB9CisgICAgICAgICAgZWxzZSBpZihjID09ICdcbicpIHsKKyAgICAgICAgICAgIGZpbmZvLT5iX2RhdGFbcGFyc2VyLT5pdGVtX29mZnNldCArIHBhcnNlci0+aXRlbV9sZW5ndGggLSAxXSA9IDA7CisgICAgICAgICAgICBwYXJzZXItPm9mZnNldHMuZmlsZW5hbWUgPSBwYXJzZXItPml0ZW1fb2Zmc2V0OworICAgICAgICAgICAgcGFyc2VyLT5zdGF0ZS5VTklYLm1haW4gPSBQTF9VTklYX0ZJTEVUWVBFOworICAgICAgICAgICAgcmMgPSBmdHBfcGxfaW5zZXJ0X2ZpbmZvKGNvbm4sIGZpbmZvKTsKKyAgICAgICAgICAgIGlmKHJjKSB7CisgICAgICAgICAgICAgIFBMX0VSUk9SKGNvbm4sIHJjKTsKKyAgICAgICAgICAgICAgcmV0dXJuIGJ1ZmZsZW47CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFBMX1VOSVhfRklMRU5BTUVfV0lORE9XU0VPTDoKKyAgICAgICAgICBpZihjID09ICdcbicpIHsKKyAgICAgICAgICAgIGZpbmZvLT5iX2RhdGFbcGFyc2VyLT5pdGVtX29mZnNldCArIHBhcnNlci0+aXRlbV9sZW5ndGhdID0gMDsKKyAgICAgICAgICAgIHBhcnNlci0+b2Zmc2V0cy5maWxlbmFtZSA9IHBhcnNlci0+aXRlbV9vZmZzZXQ7CisgICAgICAgICAgICBwYXJzZXItPnN0YXRlLlVOSVgubWFpbiA9IFBMX1VOSVhfRklMRVRZUEU7CisgICAgICAgICAgICByYyA9IGZ0cF9wbF9pbnNlcnRfZmluZm8oY29ubiwgZmluZm8pOworICAgICAgICAgICAgaWYocmMpIHsKKyAgICAgICAgICAgICAgUExfRVJST1IoY29ubiwgcmMpOworICAgICAgICAgICAgICByZXR1cm4gYnVmZmxlbjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBQTF9FUlJPUihjb25uLCBDVVJMRV9GVFBfQkFEX0ZJTEVfTElTVCk7CisgICAgICAgICAgICByZXR1cm4gYnVmZmxlbjsKKyAgICAgICAgICB9CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIFBMX1VOSVhfU1lNTElOSzoKKyAgICAgICAgc3dpdGNoKHBhcnNlci0+c3RhdGUuVU5JWC5zdWIuc3ltbGluaykgeworICAgICAgICBjYXNlIFBMX1VOSVhfU1lNTElOS19QUkVTUEFDRToKKyAgICAgICAgICBpZihjICE9ICcgJykgeworICAgICAgICAgICAgcGFyc2VyLT5pdGVtX29mZnNldCA9IGZpbmZvLT5iX3VzZWQgLSAxOworICAgICAgICAgICAgcGFyc2VyLT5pdGVtX2xlbmd0aCA9IDE7CisgICAgICAgICAgICBwYXJzZXItPnN0YXRlLlVOSVguc3ViLnN5bWxpbmsgPSBQTF9VTklYX1NZTUxJTktfTkFNRTsKKyAgICAgICAgICB9CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUExfVU5JWF9TWU1MSU5LX05BTUU6CisgICAgICAgICAgcGFyc2VyLT5pdGVtX2xlbmd0aCsrOworICAgICAgICAgIGlmKGMgPT0gJyAnKSB7CisgICAgICAgICAgICBwYXJzZXItPnN0YXRlLlVOSVguc3ViLnN5bWxpbmsgPSBQTF9VTklYX1NZTUxJTktfUFJFVEFSR0VUMTsKKyAgICAgICAgICB9CisgICAgICAgICAgZWxzZSBpZihjID09ICdccicgfHwgYyA9PSAnXG4nKSB7CisgICAgICAgICAgICBQTF9FUlJPUihjb25uLCBDVVJMRV9GVFBfQkFEX0ZJTEVfTElTVCk7CisgICAgICAgICAgICByZXR1cm4gYnVmZmxlbjsKKyAgICAgICAgICB9CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUExfVU5JWF9TWU1MSU5LX1BSRVRBUkdFVDE6CisgICAgICAgICAgcGFyc2VyLT5pdGVtX2xlbmd0aCsrOworICAgICAgICAgIGlmKGMgPT0gJy0nKSB7CisgICAgICAgICAgICBwYXJzZXItPnN0YXRlLlVOSVguc3ViLnN5bWxpbmsgPSBQTF9VTklYX1NZTUxJTktfUFJFVEFSR0VUMjsKKyAgICAgICAgICB9CisgICAgICAgICAgZWxzZSBpZihjID09ICdccicgfHwgYyA9PSAnXG4nKSB7CisgICAgICAgICAgICBQTF9FUlJPUihjb25uLCBDVVJMRV9GVFBfQkFEX0ZJTEVfTElTVCk7CisgICAgICAgICAgICByZXR1cm4gYnVmZmxlbjsKKyAgICAgICAgICB9CisgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBwYXJzZXItPnN0YXRlLlVOSVguc3ViLnN5bWxpbmsgPSBQTF9VTklYX1NZTUxJTktfTkFNRTsKKyAgICAgICAgICB9CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUExfVU5JWF9TWU1MSU5LX1BSRVRBUkdFVDI6CisgICAgICAgICAgcGFyc2VyLT5pdGVtX2xlbmd0aCsrOworICAgICAgICAgIGlmKGMgPT0gJz4nKSB7CisgICAgICAgICAgICBwYXJzZXItPnN0YXRlLlVOSVguc3ViLnN5bWxpbmsgPSBQTF9VTklYX1NZTUxJTktfUFJFVEFSR0VUMzsKKyAgICAgICAgICB9CisgICAgICAgICAgZWxzZSBpZihjID09ICdccicgfHwgYyA9PSAnXG4nKSB7CisgICAgICAgICAgICBQTF9FUlJPUihjb25uLCBDVVJMRV9GVFBfQkFEX0ZJTEVfTElTVCk7CisgICAgICAgICAgICByZXR1cm4gYnVmZmxlbjsKKyAgICAgICAgICB9CisgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBwYXJzZXItPnN0YXRlLlVOSVguc3ViLnN5bWxpbmsgPSBQTF9VTklYX1NZTUxJTktfTkFNRTsKKyAgICAgICAgICB9CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUExfVU5JWF9TWU1MSU5LX1BSRVRBUkdFVDM6CisgICAgICAgICAgcGFyc2VyLT5pdGVtX2xlbmd0aCsrOworICAgICAgICAgIGlmKGMgPT0gJyAnKSB7CisgICAgICAgICAgICBwYXJzZXItPnN0YXRlLlVOSVguc3ViLnN5bWxpbmsgPSBQTF9VTklYX1NZTUxJTktfUFJFVEFSR0VUNDsKKyAgICAgICAgICAgIC8qIG5vdyBwbGFjZSB3aGVyZSBpcyBzeW1saW5rIGZvbGxvd2luZyAqLworICAgICAgICAgICAgZmluZm8tPmJfZGF0YVtwYXJzZXItPml0ZW1fb2Zmc2V0ICsgcGFyc2VyLT5pdGVtX2xlbmd0aCAtIDRdID0gMDsKKyAgICAgICAgICAgIHBhcnNlci0+b2Zmc2V0cy5maWxlbmFtZSA9IHBhcnNlci0+aXRlbV9vZmZzZXQ7CisgICAgICAgICAgICBwYXJzZXItPml0ZW1fbGVuZ3RoID0gMDsKKyAgICAgICAgICAgIHBhcnNlci0+aXRlbV9vZmZzZXQgPSAwOworICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlIGlmKGMgPT0gJ1xyJyB8fCBjID09ICdcbicpIHsKKyAgICAgICAgICAgIFBMX0VSUk9SKGNvbm4sIENVUkxFX0ZUUF9CQURfRklMRV9MSVNUKTsKKyAgICAgICAgICAgIHJldHVybiBidWZmbGVuOworICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHBhcnNlci0+c3RhdGUuVU5JWC5zdWIuc3ltbGluayA9IFBMX1VOSVhfU1lNTElOS19OQU1FOworICAgICAgICAgIH0KKyAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBQTF9VTklYX1NZTUxJTktfUFJFVEFSR0VUNDoKKyAgICAgICAgICBpZihjICE9ICdccicgJiYgYyAhPSAnXG4nKSB7CisgICAgICAgICAgICBwYXJzZXItPnN0YXRlLlVOSVguc3ViLnN5bWxpbmsgPSBQTF9VTklYX1NZTUxJTktfVEFSR0VUOworICAgICAgICAgICAgcGFyc2VyLT5pdGVtX29mZnNldCA9IGZpbmZvLT5iX3VzZWQgLSAxOworICAgICAgICAgICAgcGFyc2VyLT5pdGVtX2xlbmd0aCA9IDE7CisgICAgICAgICAgfQorICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgUExfRVJST1IoY29ubiwgQ1VSTEVfRlRQX0JBRF9GSUxFX0xJU1QpOworICAgICAgICAgICAgcmV0dXJuIGJ1ZmZsZW47CisgICAgICAgICAgfQorICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFBMX1VOSVhfU1lNTElOS19UQVJHRVQ6CisgICAgICAgICAgcGFyc2VyLT5pdGVtX2xlbmd0aCArKzsKKyAgICAgICAgICBpZihjID09ICdccicpIHsKKyAgICAgICAgICAgIHBhcnNlci0+aXRlbV9sZW5ndGggLS07CisgICAgICAgICAgICBwYXJzZXItPnN0YXRlLlVOSVguc3ViLnN5bWxpbmsgPSBQTF9VTklYX1NZTUxJTktfV0lORE9XU0VPTDsKKyAgICAgICAgICB9CisgICAgICAgICAgZWxzZSBpZihjID09ICdcbicpIHsKKyAgICAgICAgICAgIGZpbmZvLT5iX2RhdGFbcGFyc2VyLT5pdGVtX29mZnNldCArIHBhcnNlci0+aXRlbV9sZW5ndGggLSAxXSA9IDA7CisgICAgICAgICAgICBwYXJzZXItPm9mZnNldHMuc3ltbGlua190YXJnZXQgPSBwYXJzZXItPml0ZW1fb2Zmc2V0OworICAgICAgICAgICAgcmMgPSBmdHBfcGxfaW5zZXJ0X2ZpbmZvKGNvbm4sIGZpbmZvKTsKKyAgICAgICAgICAgIGlmKHJjKSB7CisgICAgICAgICAgICAgIFBMX0VSUk9SKGNvbm4sIHJjKTsKKyAgICAgICAgICAgICAgcmV0dXJuIGJ1ZmZsZW47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBwYXJzZXItPnN0YXRlLlVOSVgubWFpbiA9IFBMX1VOSVhfRklMRVRZUEU7CisgICAgICAgICAgfQorICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFBMX1VOSVhfU1lNTElOS19XSU5ET1dTRU9MOgorICAgICAgICAgIGlmKGMgPT0gJ1xuJykgeworICAgICAgICAgICAgZmluZm8tPmJfZGF0YVtwYXJzZXItPml0ZW1fb2Zmc2V0ICsgcGFyc2VyLT5pdGVtX2xlbmd0aCAtIDFdID0gMDsKKyAgICAgICAgICAgIHBhcnNlci0+b2Zmc2V0cy5zeW1saW5rX3RhcmdldCA9IHBhcnNlci0+aXRlbV9vZmZzZXQ7CisgICAgICAgICAgICByYyA9IGZ0cF9wbF9pbnNlcnRfZmluZm8oY29ubiwgZmluZm8pOworICAgICAgICAgICAgaWYocmMpIHsKKyAgICAgICAgICAgICAgUExfRVJST1IoY29ubiwgcmMpOworICAgICAgICAgICAgICByZXR1cm4gYnVmZmxlbjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHBhcnNlci0+c3RhdGUuVU5JWC5tYWluID0gUExfVU5JWF9GSUxFVFlQRTsKKyAgICAgICAgICB9CisgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBQTF9FUlJPUihjb25uLCBDVVJMRV9GVFBfQkFEX0ZJTEVfTElTVCk7CisgICAgICAgICAgICByZXR1cm4gYnVmZmxlbjsKKyAgICAgICAgICB9CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBicmVhazsKKyAgICBjYXNlIE9TX1RZUEVfV0lOX05UOgorICAgICAgc3dpdGNoKHBhcnNlci0+c3RhdGUuTlQubWFpbikgeworICAgICAgY2FzZSBQTF9XSU5OVF9EQVRFOgorICAgICAgICBwYXJzZXItPml0ZW1fbGVuZ3RoKys7CisgICAgICAgIGlmKHBhcnNlci0+aXRlbV9sZW5ndGggPCA5KSB7CisgICAgICAgICAgaWYoIXN0cmNocigiMDEyMzQ1Njc4OS0iLCBjKSkgeyAvKiBvbmx5IHNpbXBsZSBjb250cm9sICovCisgICAgICAgICAgICBQTF9FUlJPUihjb25uLCBDVVJMRV9GVFBfQkFEX0ZJTEVfTElTVCk7CisgICAgICAgICAgICByZXR1cm4gYnVmZmxlbjsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZihwYXJzZXItPml0ZW1fbGVuZ3RoID09IDkpIHsKKyAgICAgICAgICBpZihjID09ICcgJykgeworICAgICAgICAgICAgcGFyc2VyLT5zdGF0ZS5OVC5tYWluID0gUExfV0lOTlRfVElNRTsKKyAgICAgICAgICAgIHBhcnNlci0+c3RhdGUuTlQuc3ViLnRpbWUgPSBQTF9XSU5OVF9USU1FX1BSRVNQQUNFOworICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIFBMX0VSUk9SKGNvbm4sIENVUkxFX0ZUUF9CQURfRklMRV9MSVNUKTsKKyAgICAgICAgICAgIHJldHVybiBidWZmbGVuOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICBQTF9FUlJPUihjb25uLCBDVVJMRV9GVFBfQkFEX0ZJTEVfTElTVCk7CisgICAgICAgICAgcmV0dXJuIGJ1ZmZsZW47CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIFBMX1dJTk5UX1RJTUU6CisgICAgICAgIHBhcnNlci0+aXRlbV9sZW5ndGgrKzsKKyAgICAgICAgc3dpdGNoKHBhcnNlci0+c3RhdGUuTlQuc3ViLnRpbWUpIHsKKyAgICAgICAgY2FzZSBQTF9XSU5OVF9USU1FX1BSRVNQQUNFOgorICAgICAgICAgIGlmKCFJU1NQQUNFKGMpKSB7CisgICAgICAgICAgICBwYXJzZXItPnN0YXRlLk5ULnN1Yi50aW1lID0gUExfV0lOTlRfVElNRV9USU1FOworICAgICAgICAgIH0KKyAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBQTF9XSU5OVF9USU1FX1RJTUU6CisgICAgICAgICAgaWYoYyA9PSAnICcpIHsKKyAgICAgICAgICAgIHBhcnNlci0+b2Zmc2V0cy50aW1lID0gcGFyc2VyLT5pdGVtX29mZnNldDsKKyAgICAgICAgICAgIGZpbmZvLT5iX2RhdGFbcGFyc2VyLT5pdGVtX29mZnNldCArIHBhcnNlci0+aXRlbV9sZW5ndGggLTFdID0gMDsKKyAgICAgICAgICAgIHBhcnNlci0+c3RhdGUuTlQubWFpbiA9IFBMX1dJTk5UX0RJUk9SU0laRTsKKyAgICAgICAgICAgIHBhcnNlci0+c3RhdGUuTlQuc3ViLmRpcm9yc2l6ZSA9IFBMX1dJTk5UX0RJUk9SU0laRV9QUkVTUEFDRTsKKyAgICAgICAgICAgIHBhcnNlci0+aXRlbV9sZW5ndGggPSAwOworICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlIGlmKCFzdHJjaHIoIkFQTTAxMjM0NTY3ODk6IiwgYykpIHsKKyAgICAgICAgICAgIFBMX0VSUk9SKGNvbm4sIENVUkxFX0ZUUF9CQURfRklMRV9MSVNUKTsKKyAgICAgICAgICAgIHJldHVybiBidWZmbGVuOworICAgICAgICAgIH0KKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgUExfV0lOTlRfRElST1JTSVpFOgorICAgICAgICBzd2l0Y2gocGFyc2VyLT5zdGF0ZS5OVC5zdWIuZGlyb3JzaXplKSB7CisgICAgICAgIGNhc2UgUExfV0lOTlRfRElST1JTSVpFX1BSRVNQQUNFOgorICAgICAgICAgIGlmKGMgPT0gJyAnKSB7CisKKyAgICAgICAgICB9CisgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBwYXJzZXItPml0ZW1fb2Zmc2V0ID0gZmluZm8tPmJfdXNlZCAtIDE7CisgICAgICAgICAgICBwYXJzZXItPml0ZW1fbGVuZ3RoID0gMTsKKyAgICAgICAgICAgIHBhcnNlci0+c3RhdGUuTlQuc3ViLmRpcm9yc2l6ZSA9IFBMX1dJTk5UX0RJUk9SU0laRV9DT05URU5UOworICAgICAgICAgIH0KKyAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBQTF9XSU5OVF9ESVJPUlNJWkVfQ09OVEVOVDoKKyAgICAgICAgICBwYXJzZXItPml0ZW1fbGVuZ3RoICsrOworICAgICAgICAgIGlmKGMgPT0gJyAnKSB7CisgICAgICAgICAgICBmaW5mby0+Yl9kYXRhW3BhcnNlci0+aXRlbV9vZmZzZXQgKyBwYXJzZXItPml0ZW1fbGVuZ3RoIC0gMV0gPSAwOworICAgICAgICAgICAgaWYoc3RyY21wKCI8RElSPiIsIGZpbmZvLT5iX2RhdGEgKyBwYXJzZXItPml0ZW1fb2Zmc2V0KSA9PSAwKSB7CisgICAgICAgICAgICAgIGZpbmZvLT5maWxldHlwZSA9IENVUkxGSUxFVFlQRV9ESVJFQ1RPUlk7CisgICAgICAgICAgICAgIGZpbmZvLT5zaXplID0gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICBjaGFyICplbmRwdHI7CisgICAgICAgICAgICAgIGZpbmZvLT5zaXplID0gY3VybHhfc3RydG9vZmZ0KGZpbmZvLT5iX2RhdGEgKyBwYXJzZXItPml0ZW1fb2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZW5kcHRyLCAxMCk7CisgICAgICAgICAgICAgIGlmKCEqZW5kcHRyKSB7CisgICAgICAgICAgICAgICAgaWYoZmluZm8tPnNpemUgPT0gQ1VSTF9PRkZfVF9NQVggfHwKKyAgICAgICAgICAgICAgICAgICBmaW5mby0+c2l6ZSA9PSBDVVJMX09GRl9UX01JTikgeworICAgICAgICAgICAgICAgICAgaWYoZXJybm8gPT0gRVJBTkdFKSB7CisgICAgICAgICAgICAgICAgICAgIFBMX0VSUk9SKGNvbm4sIENVUkxFX0ZUUF9CQURfRklMRV9MSVNUKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGJ1ZmZsZW47CisgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIFBMX0VSUk9SKGNvbm4sIENVUkxFX0ZUUF9CQURfRklMRV9MSVNUKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gYnVmZmxlbjsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAvKiBjb3JyZWN0IGZpbGUgdHlwZSAqLworICAgICAgICAgICAgICBwYXJzZXItPmZpbGVfZGF0YS0+ZmlsZXR5cGUgPSBDVVJMRklMRVRZUEVfRklMRTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcGFyc2VyLT5maWxlX2RhdGEtPmZsYWdzIHw9IENVUkxGSU5GT0ZMQUdfS05PV05fU0laRTsKKyAgICAgICAgICAgIHBhcnNlci0+aXRlbV9sZW5ndGggPSAwOworICAgICAgICAgICAgcGFyc2VyLT5zdGF0ZS5OVC5tYWluID0gUExfV0lOTlRfRklMRU5BTUU7CisgICAgICAgICAgICBwYXJzZXItPnN0YXRlLk5ULnN1Yi5maWxlbmFtZSA9IFBMX1dJTk5UX0ZJTEVOQU1FX1BSRVNQQUNFOworICAgICAgICAgIH0KKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgUExfV0lOTlRfRklMRU5BTUU6CisgICAgICAgIHN3aXRjaCAocGFyc2VyLT5zdGF0ZS5OVC5zdWIuZmlsZW5hbWUpIHsKKyAgICAgICAgY2FzZSBQTF9XSU5OVF9GSUxFTkFNRV9QUkVTUEFDRToKKyAgICAgICAgICBpZihjICE9ICcgJykgeworICAgICAgICAgICAgcGFyc2VyLT5pdGVtX29mZnNldCA9IGZpbmZvLT5iX3VzZWQgLTE7CisgICAgICAgICAgICBwYXJzZXItPml0ZW1fbGVuZ3RoID0gMTsKKyAgICAgICAgICAgIHBhcnNlci0+c3RhdGUuTlQuc3ViLmZpbGVuYW1lID0gUExfV0lOTlRfRklMRU5BTUVfQ09OVEVOVDsKKyAgICAgICAgICB9CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUExfV0lOTlRfRklMRU5BTUVfQ09OVEVOVDoKKyAgICAgICAgICBwYXJzZXItPml0ZW1fbGVuZ3RoKys7CisgICAgICAgICAgaWYoYyA9PSAnXHInKSB7CisgICAgICAgICAgICBwYXJzZXItPnN0YXRlLk5ULnN1Yi5maWxlbmFtZSA9IFBMX1dJTk5UX0ZJTEVOQU1FX1dJTkVPTDsKKyAgICAgICAgICAgIGZpbmZvLT5iX2RhdGFbZmluZm8tPmJfdXNlZCAtIDFdID0gMDsKKyAgICAgICAgICB9CisgICAgICAgICAgZWxzZSBpZihjID09ICdcbicpIHsKKyAgICAgICAgICAgIHBhcnNlci0+b2Zmc2V0cy5maWxlbmFtZSA9IHBhcnNlci0+aXRlbV9vZmZzZXQ7CisgICAgICAgICAgICBmaW5mby0+Yl9kYXRhW2ZpbmZvLT5iX3VzZWQgLSAxXSA9IDA7CisgICAgICAgICAgICBwYXJzZXItPm9mZnNldHMuZmlsZW5hbWUgPSBwYXJzZXItPml0ZW1fb2Zmc2V0OworICAgICAgICAgICAgcmMgPSBmdHBfcGxfaW5zZXJ0X2ZpbmZvKGNvbm4sIGZpbmZvKTsKKyAgICAgICAgICAgIGlmKHJjKSB7CisgICAgICAgICAgICAgIFBMX0VSUk9SKGNvbm4sIHJjKTsKKyAgICAgICAgICAgICAgcmV0dXJuIGJ1ZmZsZW47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBwYXJzZXItPnN0YXRlLk5ULm1haW4gPSBQTF9XSU5OVF9EQVRFOworICAgICAgICAgICAgcGFyc2VyLT5zdGF0ZS5OVC5zdWIuZmlsZW5hbWUgPSBQTF9XSU5OVF9GSUxFTkFNRV9QUkVTUEFDRTsKKyAgICAgICAgICB9CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUExfV0lOTlRfRklMRU5BTUVfV0lORU9MOgorICAgICAgICAgIGlmKGMgPT0gJ1xuJykgeworICAgICAgICAgICAgcGFyc2VyLT5vZmZzZXRzLmZpbGVuYW1lID0gcGFyc2VyLT5pdGVtX29mZnNldDsKKyAgICAgICAgICAgIHJjID0gZnRwX3BsX2luc2VydF9maW5mbyhjb25uLCBmaW5mbyk7CisgICAgICAgICAgICBpZihyYykgeworICAgICAgICAgICAgICBQTF9FUlJPUihjb25uLCByYyk7CisgICAgICAgICAgICAgIHJldHVybiBidWZmbGVuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcGFyc2VyLT5zdGF0ZS5OVC5tYWluID0gUExfV0lOTlRfREFURTsKKyAgICAgICAgICAgIHBhcnNlci0+c3RhdGUuTlQuc3ViLmZpbGVuYW1lID0gUExfV0lOTlRfRklMRU5BTUVfUFJFU1BBQ0U7CisgICAgICAgICAgfQorICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgUExfRVJST1IoY29ubiwgQ1VSTEVfRlRQX0JBRF9GSUxFX0xJU1QpOworICAgICAgICAgICAgcmV0dXJuIGJ1ZmZsZW47CisgICAgICAgICAgfQorICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgIHJldHVybiBidWZmbGVuKzE7CisgICAgfQorCisgICAgaSsrOworICB9CisKKyAgcmV0dXJuIGJ1ZmZsZW47Cit9CmRpZmYgLS1naXQgYS9saWIvZnRwbGlzdHBhcnNlci5oIGIvbGliL2Z0cGxpc3RwYXJzZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42N2EwNmMyCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2Z0cGxpc3RwYXJzZXIuaApAQCAtMCwwICsxLDM5IEBACisjaWZuZGVmIEhFQURFUl9DVVJMX0ZUUExJU1RQQVJTRVJfSAorI2RlZmluZSBIRUFERVJfQ1VSTF9GVFBMSVNUUEFSU0VSX0gKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisgKgorICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSA8Y3VybC9jdXJsLmg+CisKKy8qIFdSSVRFRlVOQ1RJT04gY2FsbGJhY2sgZm9yIHBhcnNpbmcgTElTVCByZXNwb25zZXMgKi8KK3NpemVfdCBDdXJsX2Z0cF9wYXJzZWxpc3QoY2hhciAqYnVmZmVyLCBzaXplX3Qgc2l6ZSwgc2l6ZV90IG5tZW1iLAorICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpjb25ucHRyKTsKKworc3RydWN0IGZ0cF9wYXJzZWxpc3RfZGF0YTsgLyogZGVmaW5lZCBpbnNpZGUgZnRwbGlicGFyc2VyLmMgKi8KKworQ1VSTGNvZGUgQ3VybF9mdHBfcGFyc2VsaXN0X2dldGVycm9yKHN0cnVjdCBmdHBfcGFyc2VsaXN0X2RhdGEgKnBsX2RhdGEpOworCitzdHJ1Y3QgZnRwX3BhcnNlbGlzdF9kYXRhICpDdXJsX2Z0cF9wYXJzZWxpc3RfZGF0YV9hbGxvYyh2b2lkKTsKKwordm9pZCBDdXJsX2Z0cF9wYXJzZWxpc3RfZGF0YV9mcmVlKHN0cnVjdCBmdHBfcGFyc2VsaXN0X2RhdGEgKipwbF9kYXRhKTsKKworI2VuZGlmIC8qIEhFQURFUl9DVVJMX0ZUUExJU1RQQVJTRVJfSCAqLwpkaWZmIC0tZ2l0IGEvbGliL2dldGluZm8uYyBiL2xpYi9nZXRpbmZvLmMKaW5kZXggN2EwZWQ3MS4uYzAwZTY3NSAxMDA2NDQKLS0tIGEvbGliL2dldGluZm8uYworKysgYi9saWIvZ2V0aW5mby5jCkBAIC02Niw2ICs2NiwxMiBAQAogICBpbmZvLT5oZWFkZXJfc2l6ZSA9IDA7CiAgIGluZm8tPnJlcXVlc3Rfc2l6ZSA9IDA7CiAgIGluZm8tPm51bWNvbm5lY3RzID0gMDsKKworICBpbmZvLT5pcFswXSA9IDA7CisgIGluZm8tPnBvcnQgPSAwOworICBpbmZvLT5sb2NhbGlwWzBdID0gMDsKKyAgaW5mby0+bG9jYWxwb3J0ID0gMDsKKwogICByZXR1cm4gQ1VSTEVfT0s7CiB9CiAKQEAgLTc3LDYgKzgzLDcgQEAKICAgY2hhciAqKnBhcmFtX2NoYXJwPU5VTEw7CiAgIHN0cnVjdCBjdXJsX3NsaXN0ICoqcGFyYW1fc2xpc3RwPU5VTEw7CiAgIGludCB0eXBlOworICBjdXJsX3NvY2tldF90IHNvY2tmZDsKIAogICB1bmlvbiB7CiAgICAgc3RydWN0IGN1cmxfY2VydGluZm8gKiB0b19jZXJ0aW5mbzsKQEAgLTIxMyw3ICsyMjAsMTYgQEAKICAgICAqcGFyYW1fY2hhcnAgPSBkYXRhLT5zdGF0ZS5tb3N0X3JlY2VudF9mdHBfZW50cnlwYXRoOwogICAgIGJyZWFrOwogICBjYXNlIENVUkxJTkZPX0xBU1RTT0NLRVQ6Ci0gICAgKHZvaWQpQ3VybF9nZXRjb25uZWN0aW5mbyhkYXRhLCBwYXJhbV9sb25ncCwgTlVMTCk7CisgICAgc29ja2ZkID0gQ3VybF9nZXRjb25uZWN0aW5mbyhkYXRhLCBOVUxMKTsKKworICAgIC8qIG5vdGU6IHRoaXMgaXMgbm90IGEgZ29vZCBjb252ZXJzaW9uIGZvciBzeXN0ZW1zIHdpdGggNjQgYml0IHNvY2tldHMgYW5kCisgICAgICAgMzIgYml0IGxvbmdzICovCisgICAgaWYoc29ja2ZkICE9IENVUkxfU09DS0VUX0JBRCkKKyAgICAgICpwYXJhbV9sb25ncCA9IChsb25nKXNvY2tmZDsKKyAgICBlbHNlCisgICAgICAvKiB0aGlzIGludGVyZmFjZSBpcyBkb2N1bWVudGVkIHRvIHJldHVybiAtMSBpbiBjYXNlIG9mIGJhZG5lc3MsIHdoaWNoCisgICAgICAgICBtYXkgbm90IGJlIHRoZSBzYW1lIGFzIHRoZSBDVVJMX1NPQ0tFVF9CQUQgdmFsdWUgKi8KKyAgICAgICpwYXJhbV9sb25ncCA9IC0xOwogICAgIGJyZWFrOwogICBjYXNlIENVUkxJTkZPX1JFRElSRUNUX1VSTDoKICAgICAvKiBSZXR1cm4gdGhlIFVSTCB0aGlzIHJlcXVlc3Qgd291bGQgaGF2ZSBiZWVuIHJlZGlyZWN0ZWQgdG8gaWYgdGhhdApAQCAtMjI0LDYgKzI0MCwxOSBAQAogICAgIC8qIFJldHVybiB0aGUgaXAgYWRkcmVzcyBvZiB0aGUgbW9zdCByZWNlbnQgKHByaW1hcnkpIGNvbm5lY3Rpb24gKi8KICAgICAqcGFyYW1fY2hhcnAgPSBkYXRhLT5pbmZvLmlwOwogICAgIGJyZWFrOworICBjYXNlIENVUkxJTkZPX1BSSU1BUllfUE9SVDoKKyAgICAvKiBSZXR1cm4gdGhlIChyZW1vdGUpIHBvcnQgb2YgdGhlIG1vc3QgcmVjZW50IChwcmltYXJ5KSBjb25uZWN0aW9uICovCisgICAgKnBhcmFtX2xvbmdwID0gZGF0YS0+aW5mby5wb3J0OworICAgIGJyZWFrOworICBjYXNlIENVUkxJTkZPX0xPQ0FMX0lQOgorICAgIC8qIFJldHVybiB0aGUgc291cmNlL2xvY2FsIGlwIGFkZHJlc3Mgb2YgdGhlIG1vc3QgcmVjZW50IChwcmltYXJ5KQorICAgICAgIGNvbm5lY3Rpb24gKi8KKyAgICAqcGFyYW1fY2hhcnAgPSBkYXRhLT5pbmZvLmxvY2FsaXA7CisgICAgYnJlYWs7CisgIGNhc2UgQ1VSTElORk9fTE9DQUxfUE9SVDoKKyAgICAvKiBSZXR1cm4gdGhlIGxvY2FsIHBvcnQgb2YgdGhlIG1vc3QgcmVjZW50IChwcmltYXJ5KSBjb25uZWN0aW9uICovCisgICAgKnBhcmFtX2xvbmdwID0gZGF0YS0+aW5mby5sb2NhbHBvcnQ7CisgICAgYnJlYWs7CiAgIGNhc2UgQ1VSTElORk9fQ0VSVElORk86CiAgICAgLyogUmV0dXJuIHRoZSBhIHBvaW50ZXIgdG8gdGhlIGNlcnRpbmZvIHN0cnVjdC4gTm90IHJlYWxseSBhbiBzbGlzdAogICAgICAgIHBvaW50ZXIgYnV0IHdlIGNhbiBwcmV0ZW5kIGl0IGlzIGhlcmUgKi8KZGlmZiAtLWdpdCBhL2xpYi9nb3BoZXIuYyBiL2xpYi9nb3BoZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYTljNDViCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2dvcGhlci5jCkBAIC0wLDAgKzEsMjA4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDEwLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgInNldHVwLmgiCisKKyNpZm5kZWYgQ1VSTF9ESVNBQkxFX0dPUEhFUgorCisvKiAtLSBXSU4zMiBhcHByb3ZlZCAtLSAqLworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8Y3R5cGUuaD4KKworI2lmZGVmIFdJTjMyCisjaW5jbHVkZSA8dGltZS5oPgorI2luY2x1ZGUgPGlvLmg+CisjZWxzZQorI2lmZGVmIEhBVkVfU1lTX1NPQ0tFVF9ICisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2VuZGlmCisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorI2lmZGVmIEhBVkVfU1lTX1RJTUVfSAorI2luY2x1ZGUgPHN5cy90aW1lLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1VOSVNURF9ICisjaW5jbHVkZSA8dW5pc3RkLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxuZXRkYi5oPgorI2lmZGVmIEhBVkVfQVJQQV9JTkVUX0gKKyNpbmNsdWRlIDxhcnBhL2luZXQuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfTkVUX0lGX0gKKyNpbmNsdWRlIDxuZXQvaWYuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX0lPQ1RMX0gKKyNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KKyNlbmRpZgorCisjaWZkZWYgSEFWRV9TWVNfUEFSQU1fSAorI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2VuZGlmCisKKyNpZmRlZiBIQVZFX1NZU19TRUxFQ1RfSAorI2luY2x1ZGUgPHN5cy9zZWxlY3QuaD4KKyNlbmRpZgorCisKKyNlbmRpZgorCisjaW5jbHVkZSAidXJsZGF0YS5oIgorI2luY2x1ZGUgPGN1cmwvY3VybC5oPgorI2luY2x1ZGUgInRyYW5zZmVyLmgiCisjaW5jbHVkZSAic2VuZGYuaCIKKworI2luY2x1ZGUgInByb2dyZXNzLmgiCisjaW5jbHVkZSAic3RyZXF1YWwuaCIKKyNpbmNsdWRlICJnb3BoZXIuaCIKKyNpbmNsdWRlICJyYXdzdHIuaCIKKyNpbmNsdWRlICJzZWxlY3QuaCIKKyNpbmNsdWRlICJ1cmwuaCIKKworI2RlZmluZSBfTVBSSU5URl9SRVBMQUNFIC8qIHVzZSBvdXIgZnVuY3Rpb25zIG9ubHkgKi8KKyNpbmNsdWRlIDxjdXJsL21wcmludGYuaD4KKworLyogVGhlIGxhc3QgI2luY2x1ZGUgZmlsZSBzaG91bGQgYmU6ICovCisjaW5jbHVkZSAibWVtZGVidWcuaCIKKworCisvKgorICogRm9yd2FyZCBkZWNsYXJhdGlvbnMuCisgKi8KKworc3RhdGljIENVUkxjb2RlIGdvcGhlcl9kbyhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGJvb2wgKmRvbmUpOworCisvKgorICogR29waGVyIHByb3RvY29sIGhhbmRsZXIuCisgKiBUaGlzIGlzIGFsc28gYSBuaWNlIHNpbXBsZSB0ZW1wbGF0ZSB0byBidWlsZCBvZmYgZm9yIHNpbXBsZQorICogY29ubmVjdC1jb21tYW5kLWRvd25sb2FkIHByb3RvY29scy4KKyAqLworCitjb25zdCBzdHJ1Y3QgQ3VybF9oYW5kbGVyIEN1cmxfaGFuZGxlcl9nb3BoZXIgPSB7CisgICJHT1BIRVIiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogc2NoZW1lICovCisgIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogc2V0dXBfY29ubmVjdGlvbiAqLworICBnb3BoZXJfZG8sICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRvX2l0ICovCisgIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZG9uZSAqLworICBaRVJPX05VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRvX21vcmUgKi8KKyAgWkVST19OVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBjb25uZWN0X2l0ICovCisgIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogY29ubmVjdGluZyAqLworICBaRVJPX05VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRvaW5nICovCisgIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcHJvdG9fZ2V0c29jayAqLworICBaRVJPX05VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRvaW5nX2dldHNvY2sgKi8KKyAgWkVST19OVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBwZXJmb3JtX2dldHNvY2sgKi8KKyAgWkVST19OVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkaXNjb25uZWN0ICovCisgIFBPUlRfR09QSEVSLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZGVmcG9ydCAqLworICBQUk9UX0dPUEhFUiAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHByb3RvY29sICovCit9OworCitzdGF0aWMgQ1VSTGNvZGUgZ29waGVyX2RvKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgYm9vbCAqZG9uZSkKK3sKKyAgQ1VSTGNvZGUgcmVzdWx0PUNVUkxFX09LOworICBzdHJ1Y3QgU2Vzc2lvbkhhbmRsZSAqZGF0YT1jb25uLT5kYXRhOworICBjdXJsX3NvY2tldF90IHNvY2tmZCA9IGNvbm4tPnNvY2tbRklSU1RTT0NLRVRdOworCisgIGN1cmxfb2ZmX3QgKmJ5dGVjb3VudCA9ICZkYXRhLT5yZXEuYnl0ZWNvdW50OworICBjaGFyICpwYXRoID0gZGF0YS0+c3RhdGUucGF0aDsKKyAgY2hhciAqc2VsOworICBjaGFyICpzZWxfb3JnID0gTlVMTDsKKyAgc3NpemVfdCBhbW91bnQsIGs7CisKKyAgKmRvbmUgPSBUUlVFOyAvKiB1bmNvbmRpdGlvbmFsbHkgKi8KKworICAvKiBDcmVhdGUgc2VsZWN0b3IuIERlZ2VuZXJhdGUgY2FzZXM6IC8gYW5kIC8xID0+IGNvbnZlcnQgdG8gIiIgKi8KKyAgaWYgKHN0cmxlbihwYXRoKSA8PSAyKQorICAgIHNlbCA9IChjaGFyICopIiI7CisgIGVsc2UgeworICAgIGNoYXIgKm5ld3A7CisgICAgc2l6ZV90IGosIGk7CisgICAgaW50IGxlbjsKKworICAgIC8qIE90aGVyd2lzZSwgZHJvcCAvIGFuZCB0aGUgZmlyc3QgY2hhcmFjdGVyIChpLmUuLCBpdGVtIHR5cGUpIC4uLiAqLworICAgIG5ld3AgPSBwYXRoOworICAgIG5ld3ArPTI7CisKKyAgICAvKiAuLi4gdGhlbiB0dXJuID8gaW50byBUQUIgZm9yIHNlYXJjaCBzZXJ2ZXJzLCBWZXJvbmljYSwgZXRjLiAuLi4gKi8KKyAgICBqID0gc3RybGVuKG5ld3ApOworICAgIGZvcihpPTA7IGk8ajsgaSsrKQorICAgICAgaWYobmV3cFtpXSA9PSAnPycpCisgICAgICAgIG5ld3BbaV0gPSAnXHgwOSc7CisKKyAgICAvKiAuLi4gYW5kIGZpbmFsbHkgdW5lc2NhcGUgKi8KKyAgICBzZWwgPSBjdXJsX2Vhc3lfdW5lc2NhcGUoZGF0YSwgbmV3cCwgMCwgJmxlbik7CisgICAgaWYgKCFzZWwpCisgICAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKKyAgICBzZWxfb3JnID0gc2VsOworICB9CisKKyAgLyogV2UgdXNlIEN1cmxfd3JpdGUgaW5zdGVhZCBvZiBDdXJsX3NlbmRmIHRvIG1ha2Ugc3VyZSB0aGUgZW50aXJlIGJ1ZmZlciBpcworICAgICBzZW50LCB3aGljaCBjb3VsZCBiZSBzaXplYWJsZSB3aXRoIGxvbmcgc2VsZWN0b3JzLiAqLworICBrID0gc3RybGVuKHNlbCk7CisKKyAgZm9yKDs7KSB7CisgICAgcmVzdWx0ID0gQ3VybF93cml0ZShjb25uLCBzb2NrZmQsIHNlbCwgaywgJmFtb3VudCk7CisgICAgaWYgKENVUkxFX09LID09IHJlc3VsdCkgeyAvKiBXaGljaCBtYXkgbm90IGhhdmUgd3JpdHRlbiBpdCBhbGwhICovCisgICAgICByZXN1bHQgPSBDdXJsX2NsaWVudF93cml0ZShjb25uLCBDTElFTlRXUklURV9IRUFERVIsIHNlbCwgYW1vdW50KTsKKyAgICAgIGlmKHJlc3VsdCkgeworICAgICAgICBDdXJsX3NhZmVmcmVlKHNlbF9vcmcpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgfQorICAgICAgayAtPSBhbW91bnQ7CisgICAgICBzZWwgKz0gYW1vdW50OworICAgICAgaWYgKGsgPCAxKQorICAgICAgICBicmVhazsgLyogYnV0IGl0IGRpZCB3cml0ZSBpdCBhbGwgKi8KKyAgICB9CisgICAgZWxzZSB7CisgICAgICBmYWlsZihkYXRhLCAiRmFpbGVkIHNlbmRpbmcgR29waGVyIHJlcXVlc3QiKTsKKyAgICAgIEN1cmxfc2FmZWZyZWUoc2VsX29yZyk7CisgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAvKiBEb24ndCBidXN5bG9vcC4gVGhlIGVudGlyZSBsb29wIHRoaW5nIGlzIGEgd29yay1hcm91bmQgYXMgaXQgY2F1c2VzIGEKKyAgICAgICBCTE9DS0lORyBiZWhhdmlvciB3aGljaCBpcyBhIE5PLU5PLiBUaGlzIGZ1bmN0aW9uIHNob3VsZCByYXRoZXIgYmUKKyAgICAgICBzcGxpdCB1cCBpbiBhIGRvIGFuZCBhIGRvaW5nIHBpZWNlIHdoZXJlIHRoZSBwaWVjZXMgdGhhdCBhcmVuJ3QKKyAgICAgICBwb3NzaWJsZSB0byBzZW5kIG5vdyB3aWxsIGJlIHNlbnQgaW4gdGhlIGRvaW5nIGZ1bmN0aW9uIHJlcGVhdGVkbHkKKyAgICAgICB1bnRpbCB0aGUgZW50aXJlIHJlcXVlc3QgaXMgc2VudC4KKworICAgICAgIFdhaXQgYSB3aGlsZSBmb3IgdGhlIHNvY2tldCB0byBiZSB3cml0YWJsZS4gTm90ZSB0aGF0IHRoaXMgZG9lc24ndAorICAgICAgIGFja25vd2xlZGdlIHRoZSB0aW1lb3V0LgorICAgICovCisgICAgQ3VybF9zb2NrZXRfcmVhZHkoQ1VSTF9TT0NLRVRfQkFELCBzb2NrZmQsIDEwMCk7CisgIH0KKworICBDdXJsX3NhZmVmcmVlKHNlbF9vcmcpOworCisgIC8qIFdlIGNhbiB1c2UgQ3VybF9zZW5kZiB0byBzZW5kIHRoZSB0ZXJtaW5hbCBcclxuIHJlbGF0aXZlbHkgc2FmZWx5IGFuZAorICAgICBzYXZlIGFsbG9jaW5nIGFub3RoZXIgc3RyaW5nL2RvaW5nIGFub3RoZXIgX3dyaXRlIGxvb3AuICovCisgIHJlc3VsdCA9IEN1cmxfc2VuZGYoc29ja2ZkLCBjb25uLCAiXHJcbiIpOworICBpZiAocmVzdWx0ICE9IENVUkxFX09LKSB7CisgICAgZmFpbGYoZGF0YSwgIkZhaWxlZCBzZW5kaW5nIEdvcGhlciByZXF1ZXN0Iik7CisgICAgcmV0dXJuIHJlc3VsdDsKKyAgfQorICByZXN1bHQgPSBDdXJsX2NsaWVudF93cml0ZShjb25uLCBDTElFTlRXUklURV9IRUFERVIsIChjaGFyICopIlxyXG4iLCAyKTsKKyAgaWYocmVzdWx0KQorICAgIHJldHVybiByZXN1bHQ7CisKKyAgQ3VybF9zZXR1cF90cmFuc2Zlcihjb25uLCBGSVJTVFNPQ0tFVCwgLTEsIEZBTFNFLCBieXRlY291bnQsCisgICAgICAgICAgICAgICAgICAgICAgLTEsIE5VTEwpOyAvKiBubyB1cGxvYWQgKi8KKyAgcmV0dXJuIENVUkxFX09LOworfQorI2VuZGlmIC8qQ1VSTF9ESVNBQkxFX0dPUEhFUiovCmRpZmYgLS1naXQgYS9saWIvZ29waGVyLmggYi9saWIvZ29waGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzhiYmM0YgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9nb3BoZXIuaApAQCAtMCwwICsxLDI5IEBACisjaWZuZGVmIEhFQURFUl9DVVJMX0dPUEhFUl9ICisjZGVmaW5lIEhFQURFUl9DVVJMX0dPUEhFUl9ICisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDA5LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBDVVJMX0RJU0FCTEVfR09QSEVSCitleHRlcm4gY29uc3Qgc3RydWN0IEN1cmxfaGFuZGxlciBDdXJsX2hhbmRsZXJfZ29waGVyOworI2VuZGlmCisKKyNlbmRpZiAvKiBIRUFERVJfQ1VSTF9HT1BIRVJfSCAqLwpkaWZmIC0tZ2l0IGEvbGliL2d0bHMuYyBiL2xpYi9ndGxzLmMKaW5kZXggYjdmYTNjOS4uOTliZTA3MyAxMDA2NDQKLS0tIGEvbGliL2d0bHMuYworKysgYi9saWIvZ3Rscy5jCkBAIC0xODIsNTQgKzE4Miw3NiBAQAogfQogCiAKLS8qIHRoaXMgZnVuY3Rpb24gZG9lcyBhIEJMT0NLSU5HIFNTTC9UTFMgKHJlLSloYW5kc2hha2UgKi8KKy8qIHRoaXMgZnVuY3Rpb24gZG9lcyBhIFNTTC9UTFMgKHJlLSloYW5kc2hha2UgKi8KIHN0YXRpYyBDVVJMY29kZSBoYW5kc2hha2Uoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAotICAgICAgICAgICAgICAgICAgICAgICAgICBnbnV0bHNfc2Vzc2lvbiBzZXNzaW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc29ja2luZGV4LAotICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGR1cmluZ2Nvbm5lY3QpCisgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgZHVyaW5nY29ubmVjdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBub25ibG9ja2luZykKIHsKICAgc3RydWN0IFNlc3Npb25IYW5kbGUgKmRhdGEgPSBjb25uLT5kYXRhOworICBzdHJ1Y3Qgc3NsX2Nvbm5lY3RfZGF0YSAqY29ubnNzbCA9ICZjb25uLT5zc2xbc29ja2luZGV4XTsKKyAgZ251dGxzX3Nlc3Npb24gc2Vzc2lvbiA9IGNvbm4tPnNzbFtzb2NraW5kZXhdLnNlc3Npb247CisgIGN1cmxfc29ja2V0X3Qgc29ja2ZkID0gY29ubi0+c29ja1tzb2NraW5kZXhdOworICBsb25nIHRpbWVvdXRfbXM7CiAgIGludCByYzsKLSAgaWYoIWd0bHNfaW5pdGVkKQotICAgIEN1cmxfZ3Rsc19pbml0KCk7Ci0gIGRvIHsKLSAgICByYyA9IGdudXRsc19oYW5kc2hha2Uoc2Vzc2lvbik7CisgIGludCB3aGF0OwogCi0gICAgaWYoKHJjID09IEdOVVRMU19FX0FHQUlOKSB8fCAocmMgPT0gR05VVExTX0VfSU5URVJSVVBURUQpKSB7Ci0gICAgICBsb25nIHRpbWVvdXRfbXMgPSBDdXJsX3RpbWVsZWZ0KGNvbm4sIE5VTEwsIGR1cmluZ2Nvbm5lY3QpOworICB3aGlsZSgxKSB7CisgICAgLyogY2hlY2sgYWxsb3dlZCB0aW1lIGxlZnQgKi8KKyAgICB0aW1lb3V0X21zID0gQ3VybF90aW1lbGVmdChjb25uLCBOVUxMLCBkdXJpbmdjb25uZWN0KTsKIAotICAgICAgaWYodGltZW91dF9tcyA8IDApIHsKLSAgICAgICAgLyogYSBwcmVjYXV0aW9uLCBubyBuZWVkIHRvIGNvbnRpbnVlIGlmIHRpbWUgYWxyZWFkeSBpcyB1cCAqLwotICAgICAgICBmYWlsZihkYXRhLCAiU1NMIGNvbm5lY3Rpb24gdGltZW91dCIpOwotICAgICAgICByZXR1cm4gQ1VSTEVfT1BFUkFUSU9OX1RJTUVET1VUOwotICAgICAgfQorICAgIGlmKHRpbWVvdXRfbXMgPCAwKSB7CisgICAgICAvKiBubyBuZWVkIHRvIGNvbnRpbnVlIGlmIHRpbWUgYWxyZWFkeSBpcyB1cCAqLworICAgICAgZmFpbGYoZGF0YSwgIlNTTCBjb25uZWN0aW9uIHRpbWVvdXQiKTsKKyAgICAgIHJldHVybiBDVVJMRV9PUEVSQVRJT05fVElNRURPVVQ7CisgICAgfQogCi0gICAgICByYyA9IEN1cmxfc29ja2V0X3JlYWR5KGNvbm4tPnNvY2tbc29ja2luZGV4XSwKLSAgICAgICAgICAgICAgICAgICAgICAgY29ubi0+c29ja1tzb2NraW5kZXhdLCAoaW50KXRpbWVvdXRfbXMpOwotICAgICAgaWYocmMgPiAwKQotICAgICAgICAvKiByZWFiYWJsZSBvciB3cml0YWJsZSwgZ28gbG9vcCovCi0gICAgICAgIGNvbnRpbnVlOwotICAgICAgZWxzZSBpZigwID09IHJjKSB7Ci0gICAgICAgIC8qIHRpbWVvdXQgKi8KLSAgICAgICAgZmFpbGYoZGF0YSwgIlNTTCBjb25uZWN0aW9uIHRpbWVvdXQiKTsKLSAgICAgICAgcmV0dXJuIENVUkxFX09QRVJBVElPTl9USU1FRE9VVDsKLSAgICAgIH0KLSAgICAgIGVsc2UgewotICAgICAgICAvKiBhbnl0aGluZyB0aGF0IGdldHMgaGVyZSBpcyBmYXRhbGx5IGJhZCAqLworICAgIC8qIGlmIHNzbCBpcyBleHBlY3Rpbmcgc29tZXRoaW5nLCBjaGVjayBpZiBpdCdzIGF2YWlsYWJsZS4gKi8KKyAgICBpZihjb25uc3NsLT5jb25uZWN0aW5nX3N0YXRlID09IHNzbF9jb25uZWN0XzJfcmVhZGluZworICAgICAgIHx8IGNvbm5zc2wtPmNvbm5lY3Rpbmdfc3RhdGUgPT0gc3NsX2Nvbm5lY3RfMl93cml0aW5nKSB7CisKKyAgICAgIGN1cmxfc29ja2V0X3Qgd3JpdGVmZCA9IHNzbF9jb25uZWN0XzJfd3JpdGluZz09CisgICAgICAgIGNvbm5zc2wtPmNvbm5lY3Rpbmdfc3RhdGU/c29ja2ZkOkNVUkxfU09DS0VUX0JBRDsKKyAgICAgIGN1cmxfc29ja2V0X3QgcmVhZGZkID0gc3NsX2Nvbm5lY3RfMl9yZWFkaW5nPT0KKyAgICAgICAgY29ubnNzbC0+Y29ubmVjdGluZ19zdGF0ZT9zb2NrZmQ6Q1VSTF9TT0NLRVRfQkFEOworCisgICAgICB3aGF0ID0gQ3VybF9zb2NrZXRfcmVhZHkocmVhZGZkLCB3cml0ZWZkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vbmJsb2NraW5nPzA6KGludCl0aW1lb3V0X21zKTsKKyAgICAgIGlmKHdoYXQgPCAwKSB7CisgICAgICAgIC8qIGZhdGFsIGVycm9yICovCiAgICAgICAgIGZhaWxmKGRhdGEsICJzZWxlY3QvcG9sbCBvbiBTU0wgc29ja2V0LCBlcnJubzogJWQiLCBTT0NLRVJSTk8pOwogICAgICAgICByZXR1cm4gQ1VSTEVfU1NMX0NPTk5FQ1RfRVJST1I7CiAgICAgICB9CisgICAgICBlbHNlIGlmKDAgPT0gd2hhdCkgeworICAgICAgICBpZihub25ibG9ja2luZykgeworICAgICAgICAgIHJldHVybiBDVVJMRV9PSzsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAvKiB0aW1lb3V0ICovCisgICAgICAgICAgZmFpbGYoZGF0YSwgIlNTTCBjb25uZWN0aW9uIHRpbWVvdXQiKTsKKyAgICAgICAgICByZXR1cm4gQ1VSTEVfT1BFUkFUSU9OX1RJTUVET1VUOworICAgICAgICB9CisgICAgICB9CisgICAgICAvKiBzb2NrZXQgaXMgcmVhZGFibGUgb3Igd3JpdGFibGUgKi8KICAgICB9Ci0gICAgZWxzZQotICAgICAgYnJlYWs7Ci0gIH0gd2hpbGUoMSk7CiAKLSAgaWYocmMgPCAwKSB7Ci0gICAgZmFpbGYoZGF0YSwgImdudXRsc19oYW5kc2hha2UoKSBmYWlsZWQ6ICVzIiwgZ251dGxzX3N0cmVycm9yKHJjKSk7Ci0gICAgcmV0dXJuIENVUkxFX1NTTF9DT05ORUNUX0VSUk9SOworICAgIHJjID0gZ251dGxzX2hhbmRzaGFrZShzZXNzaW9uKTsKKworICAgIGlmKChyYyA9PSBHTlVUTFNfRV9BR0FJTikgfHwgKHJjID09IEdOVVRMU19FX0lOVEVSUlVQVEVEKSkgeworICAgICAgY29ubnNzbC0+Y29ubmVjdGluZ19zdGF0ZSA9CisgICAgICAgIGdudXRsc19yZWNvcmRfZ2V0X2RpcmVjdGlvbihzZXNzaW9uKT8KKyAgICAgICAgc3NsX2Nvbm5lY3RfMl93cml0aW5nOnNzbF9jb25uZWN0XzJfcmVhZGluZzsKKyAgICAgIGlmKG5vbmJsb2NraW5nKSB7CisgICAgICAgIHJldHVybiBDVVJMRV9PSzsKKyAgICAgIH0KKyAgICB9IGVsc2UgaWYgKHJjIDwgMCkgeworICAgICAgZmFpbGYoZGF0YSwgImdudXRsc19oYW5kc2hha2UoKSBmYWlsZWQ6ICVzIiwgZ251dGxzX3N0cmVycm9yKHJjKSk7CisgICAgfSBlbHNlIHsKKyAgICAgIC8qIFJlc2V0IG91ciBjb25uZWN0IHN0YXRlIG1hY2hpbmUgKi8KKyAgICAgIGNvbm5zc2wtPmNvbm5lY3Rpbmdfc3RhdGUgPSBzc2xfY29ubmVjdF8xOworICAgICAgcmV0dXJuIENVUkxFX09LOworICAgIH0KICAgfQotCi0gIHJldHVybiBDVVJMRV9PSzsKIH0KIAogc3RhdGljIGdudXRsc194NTA5X2NydF9mbXQgZG9fZmlsZV90eXBlKGNvbnN0IGNoYXIgKnR5cGUpCkBAIC0yNDMsMzEgKzI2NSwxNCBAQAogICByZXR1cm4gLTE7CiB9CiAKLQotLyoKLSAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGFmdGVyIHRoZSBUQ1AgY29ubmVjdCBoYXMgY29tcGxldGVkLiBTZXR1cCB0aGUgVExTCi0gKiBsYXllciBhbmQgZG8gYWxsIG5lY2Vzc2FyeSBtYWdpYy4KLSAqLwotQ1VSTGNvZGUKLUN1cmxfZ3Rsc19jb25uZWN0KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKLSAgICAgICAgICAgICAgICAgIGludCBzb2NraW5kZXgpCi0KK3N0YXRpYyBDVVJMY29kZQorZ3Rsc19jb25uZWN0X3N0ZXAxKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICBpbnQgc29ja2luZGV4KQogewogICBzdGF0aWMgY29uc3QgaW50IGNlcnRfdHlwZV9wcmlvcml0eVtdID0geyBHTlVUTFNfQ1JUX1g1MDksIDAgfTsKICAgc3RydWN0IFNlc3Npb25IYW5kbGUgKmRhdGEgPSBjb25uLT5kYXRhOwogICBnbnV0bHNfc2Vzc2lvbiBzZXNzaW9uOwogICBpbnQgcmM7Ci0gIHVuc2lnbmVkIGludCBjZXJ0X2xpc3Rfc2l6ZTsKLSAgY29uc3QgZ251dGxzX2RhdHVtICpjaGFpbnA7Ci0gIHVuc2lnbmVkIGludCB2ZXJpZnlfc3RhdHVzOwotICBnbnV0bHNfeDUwOV9jcnQgeDUwOV9jZXJ0LHg1MDlfaXNzdWVyOwotICBnbnV0bHNfZGF0dW0gaXNzdWVycDsKLSAgY2hhciBjZXJ0YnVmWzI1Nl07IC8qIGJpZyBlbm91Z2g/ICovCi0gIHNpemVfdCBzaXplOwotICB1bnNpZ25lZCBpbnQgYWxnbzsKLSAgdW5zaWduZWQgaW50IGJpdHM7Ci0gIHRpbWVfdCBjZXJ0Y2xvY2s7Ci0gIGNvbnN0IGNoYXIgKnB0cjsKICAgdm9pZCAqc3NsX3Nlc3Npb25pZDsKICAgc2l6ZV90IHNzbF9pZHNpemU7CiAgIGJvb2wgc25pID0gVFJVRTsgLyogZGVmYXVsdCBpcyBTTkkgZW5hYmxlZCAqLwpAQCAtNDExLDEwICs0MTYsMzIgQEAKICAgICBpbmZvZiAoZGF0YSwgIlNTTCByZS11c2luZyBzZXNzaW9uIElEXG4iKTsKICAgfQogCi0gIHJjID0gaGFuZHNoYWtlKGNvbm4sIHNlc3Npb24sIHNvY2tpbmRleCwgVFJVRSk7Ci0gIGlmKHJjKQotICAgIC8qIGhhbmRzaGFrZSgpIHNldHMgaXRzIG93biBlcnJvciBtZXNzYWdlIHdpdGggZmFpbGYoKSAqLwotICAgIHJldHVybiByYzsKKyAgcmV0dXJuIENVUkxFX09LOworfQorCitzdGF0aWMgQ3VybF9yZWN2IGd0bHNfcmVjdjsKK3N0YXRpYyBDdXJsX3NlbmQgZ3Rsc19zZW5kOworCitzdGF0aWMgQ1VSTGNvZGUKK2d0bHNfY29ubmVjdF9zdGVwMyhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgaW50IHNvY2tpbmRleCkKK3sKKyAgdW5zaWduZWQgaW50IGNlcnRfbGlzdF9zaXplOworICBjb25zdCBnbnV0bHNfZGF0dW0gKmNoYWlucDsKKyAgdW5zaWduZWQgaW50IHZlcmlmeV9zdGF0dXM7CisgIGdudXRsc194NTA5X2NydCB4NTA5X2NlcnQseDUwOV9pc3N1ZXI7CisgIGdudXRsc19kYXR1bSBpc3N1ZXJwOworICBjaGFyIGNlcnRidWZbMjU2XTsgLyogYmlnIGVub3VnaD8gKi8KKyAgc2l6ZV90IHNpemU7CisgIHVuc2lnbmVkIGludCBhbGdvOworICB1bnNpZ25lZCBpbnQgYml0czsKKyAgdGltZV90IGNlcnRjbG9jazsKKyAgY29uc3QgY2hhciAqcHRyOworICBzdHJ1Y3QgU2Vzc2lvbkhhbmRsZSAqZGF0YSA9IGNvbm4tPmRhdGE7CisgIGdudXRsc19zZXNzaW9uIHNlc3Npb24gPSBjb25uLT5zc2xbc29ja2luZGV4XS5zZXNzaW9uOworICBpbnQgcmM7CisgIGludCBpbmNhY2hlOworICB2b2lkICpzc2xfc2Vzc2lvbmlkOwogCiAgIC8qIFRoaXMgZnVuY3Rpb24gd2lsbCByZXR1cm4gdGhlIHBlZXIncyByYXcgY2VydGlmaWNhdGUgKGNoYWluKSBhcyBzZW50IGJ5CiAgICAgIHRoZSBwZWVyLiBUaGVzZSBjZXJ0aWZpY2F0ZXMgYXJlIGluIHJhdyBmb3JtYXQgKERFUiBlbmNvZGVkIGZvcgpAQCAtNjA2LDYgKzYzMyw4IEBACiAgIGluZm9mKGRhdGEsICJcdCBNQUM6ICVzXG4iLCBwdHIpOwogCiAgIGNvbm4tPnNzbFtzb2NraW5kZXhdLnN0YXRlID0gc3NsX2Nvbm5lY3Rpb25fY29tcGxldGU7CisgIGNvbm4tPnJlY3Zbc29ja2luZGV4XSA9IGd0bHNfcmVjdjsKKyAgY29ubi0+c2VuZFtzb2NraW5kZXhdID0gZ3Rsc19zZW5kOwogCiAgIHsKICAgICAvKiB3ZSBhbHdheXMgdW5jb25kaXRpb25hbGx5IGdldCB0aGUgc2Vzc2lvbiBpZCBoZXJlLCBhcyBldmVuIGlmIHdlCkBAIC02MjMsMzMgKzY1MiwxMDAgQEAKICAgICAgIC8qIGV4dHJhY3Qgc2Vzc2lvbiBJRCB0byB0aGUgYWxsb2NhdGVkIGJ1ZmZlciAqLwogICAgICAgZ251dGxzX3Nlc3Npb25fZ2V0X2RhdGEoc2Vzc2lvbiwgY29ubmVjdF9zZXNzaW9uaWQsICZjb25uZWN0X2lkc2l6ZSk7CiAKLSAgICAgIGlmKHNzbF9zZXNzaW9uaWQpCisgICAgICBpbmNhY2hlID0gIShDdXJsX3NzbF9nZXRzZXNzaW9uaWQoY29ubiwgJnNzbF9zZXNzaW9uaWQsIE5VTEwpKTsKKyAgICAgIGlmIChpbmNhY2hlKSB7CiAgICAgICAgIC8qIHRoZXJlIHdhcyBvbmUgYmVmb3JlIGluIHRoZSBjYWNoZSwgc28gaW5zdGVhZCBvZiByaXNraW5nIHRoYXQgdGhlCiAgICAgICAgICAgIHByZXZpb3VzIG9uZSB3YXMgcmVqZWN0ZWQsIHdlIGp1c3Qga2lsbCB0aGF0IGFuZCBzdG9yZSB0aGUgbmV3ICovCiAgICAgICAgIEN1cmxfc3NsX2RlbHNlc3Npb25pZChjb25uLCBzc2xfc2Vzc2lvbmlkKTsKKyAgICAgIH0KIAogICAgICAgLyogc3RvcmUgdGhpcyBzZXNzaW9uIGlkICovCiAgICAgICByZXR1cm4gQ3VybF9zc2xfYWRkc2Vzc2lvbmlkKGNvbm4sIGNvbm5lY3Rfc2Vzc2lvbmlkLCBjb25uZWN0X2lkc2l6ZSk7CiAgICAgfQotCiAgIH0KIAogICByZXR1cm4gQ1VSTEVfT0s7CiB9CiAKIAotLyogZm9yIGRvY3VtZW50YXRpb24gc2VlIEN1cmxfc3NsX3NlbmQoKSBpbiBzc2xnZW4uaCAqLwotc3NpemVfdCBDdXJsX2d0bHNfc2VuZChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCi0gICAgICAgICAgICAgICAgICAgICAgIGludCBzb2NraW5kZXgsCi0gICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKm1lbSwKLSAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgaW50ICpjdXJsY29kZSkKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBhZnRlciB0aGUgVENQIGNvbm5lY3QgaGFzIGNvbXBsZXRlZC4gU2V0dXAgdGhlIFRMUworICogbGF5ZXIgYW5kIGRvIGFsbCBuZWNlc3NhcnkgbWFnaWMuCisgKi8KKy8qIFdlIHVzZSBjb25uc3NsLT5jb25uZWN0aW5nX3N0YXRlIHRvIGtlZXAgdHJhY2sgb2YgdGhlIGNvbm5lY3Rpb24gc3RhdHVzOworICAgdGhlcmUgYXJlIHRocmVlIHN0YXRlczogJ3NzbF9jb25uZWN0XzEnIChub3Qgc3RhcnRlZCB5ZXQgb3IgY29tcGxldGUpLAorICAgJ3NzbF9jb25uZWN0XzJfcmVhZGluZycgKHdhaXRpbmcgZm9yIGRhdGEgZnJvbSBzZXJ2ZXIpLCBhbmQKKyAgICdzc2xfY29ubmVjdF8yX3dyaXRpbmcnICh3YWl0aW5nIHRvIGJlIGFibGUgdG8gd3JpdGUpLgorICovCitzdGF0aWMgQ1VSTGNvZGUKK2d0bHNfY29ubmVjdF9jb21tb24oc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICBpbnQgc29ja2luZGV4LAorICAgICAgICAgICAgICAgICAgICBib29sIG5vbmJsb2NraW5nLAorICAgICAgICAgICAgICAgICAgICBib29sICpkb25lKQoreworICBpbnQgcmM7CisgIHN0cnVjdCBzc2xfY29ubmVjdF9kYXRhICpjb25uc3NsID0gJmNvbm4tPnNzbFtzb2NraW5kZXhdOworCisgIC8qIEluaXRpYXRlIHRoZSBjb25uZWN0aW9uLCBpZiBub3QgYWxyZWFkeSBkb25lICovCisgIGlmKHNzbF9jb25uZWN0XzE9PWNvbm5zc2wtPmNvbm5lY3Rpbmdfc3RhdGUpIHsKKyAgICByYyA9IGd0bHNfY29ubmVjdF9zdGVwMSAoY29ubiwgc29ja2luZGV4KTsKKyAgICBpZihyYykKKyAgICAgIHJldHVybiByYzsKKyAgfQorCisgIHJjID0gaGFuZHNoYWtlKGNvbm4sIHNvY2tpbmRleCwgVFJVRSwgbm9uYmxvY2tpbmcpOworICBpZihyYykKKyAgICAvKiBoYW5kc2hha2UoKSBzZXRzIGl0cyBvd24gZXJyb3IgbWVzc2FnZSB3aXRoIGZhaWxmKCkgKi8KKyAgICByZXR1cm4gcmM7CisKKyAgLyogRmluaXNoIGNvbm5lY3Rpbmcgb25jZSB0aGUgaGFuZHNoYWtlIGlzIGRvbmUgKi8KKyAgaWYoc3NsX2Nvbm5lY3RfMT09Y29ubnNzbC0+Y29ubmVjdGluZ19zdGF0ZSkgeworICAgIHJjID0gZ3Rsc19jb25uZWN0X3N0ZXAzKGNvbm4sIHNvY2tpbmRleCk7CisgICAgaWYocmMpCisgICAgICByZXR1cm4gcmM7CisgIH0KKworICAqZG9uZSA9IHNzbF9jb25uZWN0XzE9PWNvbm5zc2wtPmNvbm5lY3Rpbmdfc3RhdGU7CisKKyAgcmV0dXJuIENVUkxFX09LOworfQorCitDVVJMY29kZQorQ3VybF9ndGxzX2Nvbm5lY3Rfbm9uYmxvY2tpbmcoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNvY2tpbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgKmRvbmUpCit7CisgIHJldHVybiBndGxzX2Nvbm5lY3RfY29tbW9uKGNvbm4sIHNvY2tpbmRleCwgVFJVRSwgZG9uZSk7Cit9CisKK0NVUkxjb2RlCitDdXJsX2d0bHNfY29ubmVjdChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICBpbnQgc29ja2luZGV4KQorCit7CisgIENVUkxjb2RlIHJldGNvZGU7CisgIGJvb2wgZG9uZSA9IEZBTFNFOworCisgIHJldGNvZGUgPSBndGxzX2Nvbm5lY3RfY29tbW9uKGNvbm4sIHNvY2tpbmRleCwgRkFMU0UsICZkb25lKTsKKyAgaWYocmV0Y29kZSkKKyAgICByZXR1cm4gcmV0Y29kZTsKKworICBERUJVR0FTU0VSVChkb25lKTsKKworICByZXR1cm4gQ1VSTEVfT0s7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGd0bHNfc2VuZChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNvY2tpbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICptZW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBDVVJMY29kZSAqY3VybGNvZGUpCiB7CiAgIHNzaXplX3QgcmMgPSBnbnV0bHNfcmVjb3JkX3NlbmQoY29ubi0+c3NsW3NvY2tpbmRleF0uc2Vzc2lvbiwgbWVtLCBsZW4pOwogCiAgIGlmKHJjIDwgMCApIHsKICAgICAqY3VybGNvZGUgPSAocmMgPT0gR05VVExTX0VfQUdBSU4pCi0gICAgICA/IC8qIEVXT1VMREJMT0NLICovIC0xCisgICAgICA/IENVUkxFX0FHQUlOCiAgICAgICA6IENVUkxFX1NFTkRfRVJST1I7CiAKICAgICByYyA9IC0xOwpAQCAtNzUxLDM2ICs4NDcsMjkgQEAKICAgcmV0dXJuIHJldHZhbDsKIH0KIAotLyogZm9yIGRvY3VtZW50YXRpb24gc2VlIEN1cmxfc3NsX3JlY3YoKSBpbiBzc2xnZW4uaCAqLwotc3NpemVfdCBDdXJsX2d0bHNfcmVjdihzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIC8qIGNvbm5lY3Rpb24gZGF0YSAqLwotICAgICAgICAgICAgICAgICAgICAgICBpbnQgbnVtLCAgICAgICAgICAgICAgICAgIC8qIHNvY2tldGluZGV4ICovCi0gICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmJ1ZiwgICAgICAgICAgICAgICAgLyogc3RvcmUgcmVhZCBkYXRhIGhlcmUgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGJ1ZmZlcnNpemUsICAgICAgICAvKiBtYXggYW1vdW50IHRvIHJlYWQgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgaW50ICpjdXJsY29kZSkKK3N0YXRpYyBzc2l6ZV90IGd0bHNfcmVjdihzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIC8qIGNvbm5lY3Rpb24gZGF0YSAqLworICAgICAgICAgICAgICAgICAgICAgICAgIGludCBudW0sICAgICAgICAgICAgICAgICAgLyogc29ja2V0aW5kZXggKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpidWYsICAgICAgICAgICAgICAgIC8qIHN0b3JlIHJlYWQgZGF0YSBoZXJlICovCisgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGJ1ZmZlcnNpemUsICAgICAgICAvKiBtYXggYW1vdW50IHRvIHJlYWQgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICBDVVJMY29kZSAqY3VybGNvZGUpCiB7CiAgIHNzaXplX3QgcmV0OwogCiAgIHJldCA9IGdudXRsc19yZWNvcmRfcmVjdihjb25uLT5zc2xbbnVtXS5zZXNzaW9uLCBidWYsIGJ1ZmZlcnNpemUpOwogICBpZigocmV0ID09IEdOVVRMU19FX0FHQUlOKSB8fCAocmV0ID09IEdOVVRMU19FX0lOVEVSUlVQVEVEKSkgewotICAgICpjdXJsY29kZSA9IC0xOworICAgICpjdXJsY29kZSA9IENVUkxFX0FHQUlOOwogICAgIHJldHVybiAtMTsKICAgfQogCiAgIGlmKHJldCA9PSBHTlVUTFNfRV9SRUhBTkRTSEFLRSkgewogICAgIC8qIEJMT0NLSU5HIGNhbGwsIHRoaXMgaXMgYmFkIGJ1dCBhIHdvcmstYXJvdW5kIGZvciBub3cuIEZpeGluZyB0aGlzICJ0aGUKICAgICAgICBwcm9wZXIgd2F5IiB0YWtlcyBhIHdob2xlIGxvdCBvZiB3b3JrLiAqLwotICAgIENVUkxjb2RlIHJjID0gaGFuZHNoYWtlKGNvbm4sIGNvbm4tPnNzbFtudW1dLnNlc3Npb24sIG51bSwgRkFMU0UpOworICAgIENVUkxjb2RlIHJjID0gaGFuZHNoYWtlKGNvbm4sIG51bSwgRkFMU0UsIEZBTFNFKTsKICAgICBpZihyYykKICAgICAgIC8qIGhhbmRzaGFrZSgpIHdyaXRlcyBlcnJvciBtZXNzYWdlIG9uIGl0cyBvd24gKi8KICAgICAgICpjdXJsY29kZSA9IHJjOwogICAgIGVsc2UKLSAgICAgICpjdXJsY29kZSA9IC0xOyAvKiB0aGVuIHJldHVybiBhcyBpZiB0aGlzIHdhcyBhIHdvdWxkYmxvY2sgKi8KLSAgICByZXR1cm4gLTE7Ci0gIH0KLQotICBpZighcmV0KSB7Ci0gICAgZmFpbGYoY29ubi0+ZGF0YSwgIlBlZXIgY2xvc2VkIHRoZSBUTFMgY29ubmVjdGlvbiIpOwotICAgICpjdXJsY29kZSA9IENVUkxFX1JFQ1ZfRVJST1I7CisgICAgICAqY3VybGNvZGUgPSBDVVJMRV9BR0FJTjsgLyogdGhlbiByZXR1cm4gYXMgaWYgdGhpcyB3YXMgYSB3b3VsZGJsb2NrICovCiAgICAgcmV0dXJuIC0xOwogICB9CiAKZGlmZiAtLWdpdCBhL2xpYi9ndGxzLmggYi9saWIvZ3Rscy5oCmluZGV4IDlmZTYxOGEuLjUxZTBhZjEgMTAwNjQ0Ci0tLSBhL2xpYi9ndGxzLmgKKysrIGIvbGliL2d0bHMuaApAQCAtMjcsNiArMjcsOSBAQAogaW50IEN1cmxfZ3Rsc19pbml0KHZvaWQpOwogaW50IEN1cmxfZ3Rsc19jbGVhbnVwKHZvaWQpOwogQ1VSTGNvZGUgQ3VybF9ndGxzX2Nvbm5lY3Qoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBpbnQgc29ja2luZGV4KTsKK0NVUkxjb2RlIEN1cmxfZ3Rsc19jb25uZWN0X25vbmJsb2NraW5nKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzb2NraW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sICpkb25lKTsKIAogLyogdGVsbCBHbnVUTFMgdG8gY2xvc2UgZG93biBhbGwgb3BlbiBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29ubmVjdGlvbnMgKGFuZAogICAgdGh1cyBzZXNzaW9uIElEIGNhY2hpbmcgZXRjKSAqLwpAQCAtMzUsMTQgKzM4LDYgQEAKICAvKiBjbG9zZSBhIFNTTCBjb25uZWN0aW9uICovCiB2b2lkIEN1cmxfZ3Rsc19jbG9zZShzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGludCBzb2NraW5kZXgpOwogCi0vKiBmb3IgZG9jdW1lbnRhdGlvbiBzZWUgQ3VybF9zc2xfc2VuZCgpIGluIHNzbGdlbi5oICovCi1zc2l6ZV90IEN1cmxfZ3Rsc19zZW5kKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgaW50IHNvY2tpbmRleCwKLSAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqbWVtLCBzaXplX3QgbGVuLCBpbnQgKmN1cmxjb2RlKTsKLQotLyogZm9yIGRvY3VtZW50YXRpb24gc2VlIEN1cmxfc3NsX3JlY3YoKSBpbiBzc2xnZW4uaCAqLwotc3NpemVfdCBDdXJsX2d0bHNfcmVjdihzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGludCBudW0sIGNoYXIgKmJ1ZiwKLSAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGJ1ZmZlcnNpemUsIGludCAqY3VybGNvZGUpOwotCiB2b2lkIEN1cmxfZ3Rsc19zZXNzaW9uX2ZyZWUodm9pZCAqcHRyKTsKIHNpemVfdCBDdXJsX2d0bHNfdmVyc2lvbihjaGFyICpidWZmZXIsIHNpemVfdCBzaXplKTsKIGludCBDdXJsX2d0bHNfc2h1dGRvd24oc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBpbnQgc29ja2luZGV4KTsKQEAgLTUyLDYgKzQ3LDcgQEAKICNkZWZpbmUgY3VybHNzbF9pbml0IEN1cmxfZ3Rsc19pbml0CiAjZGVmaW5lIGN1cmxzc2xfY2xlYW51cCBDdXJsX2d0bHNfY2xlYW51cAogI2RlZmluZSBjdXJsc3NsX2Nvbm5lY3QgQ3VybF9ndGxzX2Nvbm5lY3QKKyNkZWZpbmUgY3VybHNzbF9jb25uZWN0X25vbmJsb2NraW5nIEN1cmxfZ3Rsc19jb25uZWN0X25vbmJsb2NraW5nCiAjZGVmaW5lIGN1cmxzc2xfc2Vzc2lvbl9mcmVlKHgpICBDdXJsX2d0bHNfc2Vzc2lvbl9mcmVlKHgpCiAjZGVmaW5lIGN1cmxzc2xfY2xvc2VfYWxsIEN1cmxfZ3Rsc19jbG9zZV9hbGwKICNkZWZpbmUgY3VybHNzbF9jbG9zZSBDdXJsX2d0bHNfY2xvc2UKQEAgLTU5LDggKzU1LDYgQEAKICNkZWZpbmUgY3VybHNzbF9zZXRfZW5naW5lKHgseSkgKHg9eCwgeT15LCBDVVJMRV9GQUlMRURfSU5JVCkKICNkZWZpbmUgY3VybHNzbF9zZXRfZW5naW5lX2RlZmF1bHQoeCkgKHg9eCwgQ1VSTEVfRkFJTEVEX0lOSVQpCiAjZGVmaW5lIGN1cmxzc2xfZW5naW5lc19saXN0KHgpICh4PXgsIChzdHJ1Y3QgY3VybF9zbGlzdCAqKU5VTEwpCi0jZGVmaW5lIGN1cmxzc2xfc2VuZCBDdXJsX2d0bHNfc2VuZAotI2RlZmluZSBjdXJsc3NsX3JlY3YgQ3VybF9ndGxzX3JlY3YKICNkZWZpbmUgY3VybHNzbF92ZXJzaW9uIEN1cmxfZ3Rsc192ZXJzaW9uCiAjZGVmaW5lIGN1cmxzc2xfY2hlY2tfY3huKHgpICh4PXgsIC0xKQogI2RlZmluZSBjdXJsc3NsX2RhdGFfcGVuZGluZyh4LHkpICh4PXgsIHk9eSwgMCkKZGlmZiAtLWdpdCBhL2xpYi9obWFjLmMgYi9saWIvaG1hYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjMDFkMTEKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvaG1hYy5jCkBAIC0wLDAgKzEsMTMxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDEwLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICogUkZDMjEwNCBLZXllZC1IYXNoaW5nIGZvciBNZXNzYWdlIEF1dGhlbnRpY2F0aW9uCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgInNldHVwLmgiCisKKyNpZm5kZWYgQ1VSTF9ESVNBQkxFX0NSWVBUT19BVVRICisKKyNpbmNsdWRlICJjdXJsX2htYWMuaCIKKworI2RlZmluZSBfTVBSSU5URl9SRVBMQUNFIC8qIHVzZSBvdXIgZnVuY3Rpb25zIG9ubHkgKi8KKyNpbmNsdWRlIDxjdXJsL21wcmludGYuaD4KKworI2luY2x1ZGUgImN1cmxfbWVtb3J5LmgiCisvKiBUaGUgbGFzdCAjaW5jbHVkZSBmaWxlIHNob3VsZCBiZTogKi8KKyNpbmNsdWRlICJtZW1kZWJ1Zy5oIgorCisvKgorICogR2VuZXJpYyBITUFDIGFsZ29yaXRobS4KKyAqCisgKiAgIFRoaXMgbW9kdWxlIGNvbXB1dGVzIEhNQUMgZGlnZXN0cyBiYXNlZCBvbiBhbnkgaGFzaCBmdW5jdGlvbi4gUGFyYW1ldGVycworICogYW5kIGNvbXB1dGluZyBwcm9jZWR1cmVzIGFyZSBzZXQtdXAgZHluYW1pY2FsbHkgYXQgSE1BQyBjb21wdXRhdGlvbgorICogY29udGV4dCBpbml0aWFsaXNhdGlvbi4KKyAqLworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX2lwYWQgPSAweDM2Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19vcGFkID0gMHg1QzsKKworCisKK0hNQUNfY29udGV4dCAqCitDdXJsX0hNQUNfaW5pdChjb25zdCBITUFDX3BhcmFtcyAqIGhhc2hwYXJhbXMsCisgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICoga2V5LAorICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGtleWxlbikKK3sKKyAgc2l6ZV90IGk7CisgIEhNQUNfY29udGV4dCAqIGN0eHQ7CisgIHVuc2lnbmVkIGNoYXIgKiBoa2V5OworICB1bnNpZ25lZCBjaGFyIGI7CisKKyAgLyogQ3JlYXRlIEhNQUMgY29udGV4dC4gKi8KKyAgaSA9IHNpemVvZiAqY3R4dCArIDIgKiBoYXNocGFyYW1zLT5obWFjX2N0eHRzaXplICsgaGFzaHBhcmFtcy0+aG1hY19yZXN1bHRsZW47CisgIGN0eHQgPSAoSE1BQ19jb250ZXh0ICopIG1hbGxvYyhpKTsKKworICBpZighY3R4dCkKKyAgICByZXR1cm4gY3R4dDsKKworICBjdHh0LT5obWFjX2hhc2ggPSBoYXNocGFyYW1zOworICBjdHh0LT5obWFjX2hhc2hjdHh0MSA9ICh2b2lkICopIChjdHh0ICsgMSk7CisgIGN0eHQtPmhtYWNfaGFzaGN0eHQyID0gKHZvaWQgKikgKChjaGFyICopIGN0eHQtPmhtYWNfaGFzaGN0eHQxICsKKyAgICAgIGhhc2hwYXJhbXMtPmhtYWNfY3R4dHNpemUpOworCisgIC8qIElmIHRoZSBrZXkgaXMgdG9vIGxvbmcsIHJlcGxhY2UgaXQgYnkgaXRzIGhhc2ggZGlnZXN0LiAqLworICBpZihrZXlsZW4gPiBoYXNocGFyYW1zLT5obWFjX21heGtleWxlbikgeworICAgICgqaGFzaHBhcmFtcy0+aG1hY19oaW5pdCkoY3R4dC0+aG1hY19oYXNoY3R4dDEpOworICAgICgqaGFzaHBhcmFtcy0+aG1hY19odXBkYXRlKShjdHh0LT5obWFjX2hhc2hjdHh0MSwga2V5LCBrZXlsZW4pOworICAgIGhrZXkgPSAodW5zaWduZWQgY2hhciAqKSBjdHh0LT5obWFjX2hhc2hjdHh0MiArIGhhc2hwYXJhbXMtPmhtYWNfY3R4dHNpemU7CisgICAgKCpoYXNocGFyYW1zLT5obWFjX2hmaW5hbCkoaGtleSwgY3R4dC0+aG1hY19oYXNoY3R4dDEpOworICAgIGtleSA9IGhrZXk7CisgICAga2V5bGVuID0gaGFzaHBhcmFtcy0+aG1hY19yZXN1bHRsZW47CisgIH0KKworICAvKiBQcmltZSB0aGUgdHdvIGhhc2ggY29udGV4dHMgd2l0aCB0aGUgbW9kaWZpZWQga2V5LiAqLworICAoKmhhc2hwYXJhbXMtPmhtYWNfaGluaXQpKGN0eHQtPmhtYWNfaGFzaGN0eHQxKTsKKyAgKCpoYXNocGFyYW1zLT5obWFjX2hpbml0KShjdHh0LT5obWFjX2hhc2hjdHh0Mik7CisKKyAgZm9yIChpID0gMDsgaSA8IGtleWxlbjsgaSsrKSB7CisgICAgYiA9ICprZXkgXiBobWFjX2lwYWQ7CisgICAgKCpoYXNocGFyYW1zLT5obWFjX2h1cGRhdGUpKGN0eHQtPmhtYWNfaGFzaGN0eHQxLCAmYiwgMSk7CisgICAgYiA9ICprZXkrKyBeIGhtYWNfb3BhZDsKKyAgICAoKmhhc2hwYXJhbXMtPmhtYWNfaHVwZGF0ZSkoY3R4dC0+aG1hY19oYXNoY3R4dDIsICZiLCAxKTsKKyAgfQorCisgIGZvciAoOyBpIDwgaGFzaHBhcmFtcy0+aG1hY19tYXhrZXlsZW47IGkrKykgeworICAgICgqaGFzaHBhcmFtcy0+aG1hY19odXBkYXRlKShjdHh0LT5obWFjX2hhc2hjdHh0MSwgJmhtYWNfaXBhZCwgMSk7CisgICAgKCpoYXNocGFyYW1zLT5obWFjX2h1cGRhdGUpKGN0eHQtPmhtYWNfaGFzaGN0eHQyLCAmaG1hY19vcGFkLCAxKTsKKyAgfQorCisgIC8qIERvbmUsIHJldHVybiBwb2ludGVyIHRvIEhNQUMgY29udGV4dC4gKi8KKyAgcmV0dXJuIGN0eHQ7Cit9CisKK2ludCBDdXJsX0hNQUNfdXBkYXRlKEhNQUNfY29udGV4dCAqIGN0eHQsCisgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICogZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBsZW4pCit7CisgIC8qIFVwZGF0ZSBmaXJzdCBoYXNoIGNhbGN1bGF0aW9uLiAqLworICAoKmN0eHQtPmhtYWNfaGFzaC0+aG1hY19odXBkYXRlKShjdHh0LT5obWFjX2hhc2hjdHh0MSwgZGF0YSwgbGVuKTsKKyAgcmV0dXJuIDA7Cit9CisKKworaW50IEN1cmxfSE1BQ19maW5hbChITUFDX2NvbnRleHQgKiBjdHh0LCB1bnNpZ25lZCBjaGFyICogcmVzdWx0KQoreworICBjb25zdCBITUFDX3BhcmFtcyAqIGhhc2hwYXJhbXMgPSBjdHh0LT5obWFjX2hhc2g7CisKKyAgLyogRG8gbm90IGdldCByZXN1bHQgaWYgY2FsbGVkIHdpdGggYSBudWxsIHBhcmFtZXRlcjogb25seSByZWxlYXNlIHN0b3JhZ2UuICovCisKKyAgaWYoIXJlc3VsdCkKKyAgICByZXN1bHQgPSAodW5zaWduZWQgY2hhciAqKSBjdHh0LT5obWFjX2hhc2hjdHh0MiArCisgICAgIGN0eHQtPmhtYWNfaGFzaC0+aG1hY19jdHh0c2l6ZTsKKworICAoKmhhc2hwYXJhbXMtPmhtYWNfaGZpbmFsKShyZXN1bHQsIGN0eHQtPmhtYWNfaGFzaGN0eHQxKTsKKyAgKCpoYXNocGFyYW1zLT5obWFjX2h1cGRhdGUpKGN0eHQtPmhtYWNfaGFzaGN0eHQyLAorICAgcmVzdWx0LCBoYXNocGFyYW1zLT5obWFjX3Jlc3VsdGxlbik7CisgICgqaGFzaHBhcmFtcy0+aG1hY19oZmluYWwpKHJlc3VsdCwgY3R4dC0+aG1hY19oYXNoY3R4dDIpOworICBmcmVlKChjaGFyICopIGN0eHQpOworICByZXR1cm4gMDsKK30KKworI2VuZGlmIC8qIENVUkxfRElTQUJMRV9DUllQVE9fQVVUSCAqLwpkaWZmIC0tZ2l0IGEvbGliL2hvc3RhcmVzLmMgYi9saWIvaG9zdGFyZXMuYwppbmRleCAwMWIyMTQyLi5hMDBmZWZhIDEwMDY0NAotLS0gYS9saWIvaG9zdGFyZXMuYworKysgYi9saWIvaG9zdGFyZXMuYwpAQCAtMjUxLDcgKzI1MSw3IEBACiAgICAgICAgc2Vjb25kIGlzIGxlZnQsIG90aGVyd2lzZSBqdXN0IHVzZSAxMDAwbXMgdG8gbWFrZSBzdXJlIHRoZSBwcm9ncmVzcwogICAgICAgIGNhbGxiYWNrIGdldHMgY2FsbGVkIGZyZXF1ZW50IGVub3VnaCAqLwogICAgIGlmKCF0dnAtPnR2X3NlYykKLSAgICAgIHRpbWVvdXRfbXMgPSB0dnAtPnR2X3VzZWMvMTAwMDsKKyAgICAgIHRpbWVvdXRfbXMgPSAoaW50KSh0dnAtPnR2X3VzZWMvMTAwMCk7CiAgICAgZWxzZQogICAgICAgdGltZW91dF9tcyA9IDEwMDA7CiAKZGlmZiAtLWdpdCBhL2xpYi9ob3N0aXAuYyBiL2xpYi9ob3N0aXAuYwppbmRleCA4ZjZhNTJlLi42MTg1YzEzIDEwMDY0NAotLS0gYS9saWIvaG9zdGlwLmMKKysrIGIvbGliL2hvc3RpcC5jCkBAIC03OCw3ICs3OCw5IEBACiAjaWYgZGVmaW5lZChDVVJMUkVTX1NZTkNIKSAmJiBcCiAgICAgZGVmaW5lZChIQVZFX0FMQVJNKSAmJiBkZWZpbmVkKFNJR0FMUk0pICYmIGRlZmluZWQoSEFWRV9TSUdTRVRKTVApCiAvKiBhbGFybS1iYXNlZCB0aW1lb3V0cyBjYW4gb25seSBiZSB1c2VkIHdpdGggYWxsIHRoZSBkZXBlbmRlbmNpZXMgc2F0aXNmaWVkICovCi0jZGVmaW5lIFVTRV9BTEFSTV9USU1FT1VUCisvLyBEaXNhYmxlIHRoaXMgdGltZW91dCwgYXMgdGhlcmUgYXJlIGEgKmxvdCogb2YgY3Jhc2hlcyB0aGF0IHNlZW0gdG8gaGFwcGVuIGluCisvLyB0aGlzIGNvZGUgb24gTWFjLCBidXQgbm90IG9uIFdpbmRvd3MKKy8vICNkZWZpbmUgVVNFX0FMQVJNX1RJTUVPVVQKICNlbmRpZgogCiAvKgpAQCAtNzE5LDUgKzcyMSwzIEBACiB7CiAgIHJldHVybiBDdXJsX2hhc2hfYWxsb2MoNywgQ3VybF9oYXNoX3N0ciwgQ3VybF9zdHJfa2V5X2NvbXBhcmUsIGZyZWVkbnNlbnRyeSk7CiB9Ci0KLQpkaWZmIC0tZ2l0IGEvbGliL2hvc3RpcDQuYyBiL2xpYi9ob3N0aXA0LmMKaW5kZXggZmJjN2Q0OS4uMDVkZDczZSAxMDA2NDQKLS0tIGEvbGliL2hvc3RpcDQuYworKysgYi9saWIvaG9zdGlwNC5jCkBAIC0xNjAsNyArMTYwLDcgQEAKICAgICAgIHNucHJpbnRmKHNidWYsIHNpemVvZihzYnVmKSwgIiVkIiwgcG9ydCk7CiAgICAgICBzYnVmcHRyID0gc2J1ZjsKICAgICB9Ci0gICAgaGludHMuYWlfZmxhZ3MgPSBBSV9DQU5PTk5BTUU7CisKICAgICAodm9pZClDdXJsX2dldGFkZHJpbmZvX2V4KGhvc3RuYW1lLCBzYnVmcHRyLCAmaGludHMsICZhaSk7CiAKICNlbGlmIGRlZmluZWQoSEFWRV9HRVRIT1NUQllOQU1FX1IpCmRpZmYgLS1naXQgYS9saWIvaG9zdGlwNi5jIGIvbGliL2hvc3RpcDYuYwppbmRleCBmYjNhZDBjLi43ZDBhOTEyIDEwMDY0NAotLS0gYS9saWIvaG9zdGlwNi5jCisrKyBiL2xpYi9ob3N0aXA2LmMKQEAgLTIxMywxMSArMjEzLDYgQEAKICAgICAvKiB0aGUgZ2l2ZW4gYWRkcmVzcyBpcyBudW1lcmljYWwgb25seSwgcHJldmVudCBhIHJldmVyc2UgbG9va3VwICovCiAgICAgaGludHMuYWlfZmxhZ3MgPSBBSV9OVU1FUklDSE9TVDsKICAgfQotI2lmZGVmIEhBVkVfR1NTQVBJCi0gIGlmKGNvbm4tPmRhdGEtPnNldC5rcmIpCi0gICAgLyogaWYga3JiIGlzIHVzZWQsIHdlIChtaWdodCkgbmVlZCB0aGUgY2Fub25pY2FsIGhvc3QgbmFtZSAqLwotICAgIGhpbnRzLmFpX2ZsYWdzIHw9IEFJX0NBTk9OTkFNRTsKLSNlbmRpZgogCiAgIGlmKHBvcnQpIHsKICAgICBzbnByaW50ZihzYnVmLCBzaXplb2Yoc2J1ZiksICIlZCIsIHBvcnQpOwpkaWZmIC0tZ2l0IGEvbGliL2hvc3R0aHJlLmMgYi9saWIvaG9zdHRocmUuYwppbmRleCAxZTQ4NDVlLi5lOGRmYTU0IDEwMDY0NAotLS0gYS9saWIvaG9zdHRocmUuYworKysgYi9saWIvaG9zdHRocmUuYwpAQCAtNDE5LDggKzQxOSw2IEBACiAKICAgaWYgKGRvbmUpIHsKICAgICBnZXRhZGRyaW5mb19jb21wbGV0ZShjb25uKTsKLSAgICBpZiAodGQtPnBvbGxfaW50ZXJ2YWwgIT0gMCkKLSAgICAgICAgQ3VybF9leHBpcmUoY29ubi0+ZGF0YSwgMCk7CiAgICAgQ3VybF9kZXN0cm95X3RocmVhZF9kYXRhKCZjb25uLT5hc3luYyk7CiAKICAgICBpZighY29ubi0+YXN5bmMuZG5zKSB7CkBAIC00MzEsMjYgKzQyOSwyMSBAQAogICAgICplbnRyeSA9IGNvbm4tPmFzeW5jLmRuczsKICAgfSBlbHNlIHsKICAgICAvKiBwb2xsIGZvciBuYW1lIGxvb2t1cCBkb25lIHdpdGggZXhwb25lbnRpYWwgYmFja29mZiB1cCB0byAyNTBtcyAqLwotICAgIGludCBlbGFwc2VkOwotCi0gICAgZWxhcHNlZCA9IEN1cmxfdHZkaWZmKEN1cmxfdHZub3coKSwgZGF0YS0+cHJvZ3Jlc3MudF9zdGFydHNpbmdsZSk7Ci0gICAgaWYgKGVsYXBzZWQgPCAwKSB7CisgICAgaW50IGVsYXBzZWQgPSBDdXJsX3R2ZGlmZihDdXJsX3R2bm93KCksIGRhdGEtPnByb2dyZXNzLnRfc3RhcnRzaW5nbGUpOworICAgIGlmIChlbGFwc2VkIDwgMCkKICAgICAgIGVsYXBzZWQgPSAwOwotICAgIH0KIAotICAgIGlmICh0ZC0+cG9sbF9pbnRlcnZhbCA9PSAwKSB7CisgICAgaWYgKHRkLT5wb2xsX2ludGVydmFsID09IDApCiAgICAgICAvKiBTdGFydCBhdCAxbXMgcG9sbCBpbnRlcnZhbCAqLwogICAgICAgdGQtPnBvbGxfaW50ZXJ2YWwgPSAxOwotICAgIH0gZWxzZSBpZiAoZWxhcHNlZCA+PSB0ZC0+aW50ZXJ2YWxfZW5kKSB7CisgICAgZWxzZSBpZiAoZWxhcHNlZCA+PSB0ZC0+aW50ZXJ2YWxfZW5kKQogICAgICAgLyogQmFjay1vZmYgZXhwb25lbnRpYWxseSBpZiBsYXN0IGludGVydmFsIGV4cGlyZWQgICovCiAgICAgICB0ZC0+cG9sbF9pbnRlcnZhbCAqPSAyOwotICAgIH0KIAogICAgIGlmICh0ZC0+cG9sbF9pbnRlcnZhbCA+IDI1MCkKICAgICAgIHRkLT5wb2xsX2ludGVydmFsID0gMjUwOwogCiAgICAgdGQtPmludGVydmFsX2VuZCA9IGVsYXBzZWQgKyB0ZC0+cG9sbF9pbnRlcnZhbDsKLQogICAgIEN1cmxfZXhwaXJlKGNvbm4tPmRhdGEsIHRkLT5wb2xsX2ludGVydmFsKTsKICAgfQogCkBAIC00ODQsOCArNDc3LDYgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHBvcnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqd2FpdHApCiB7Ci0gIHN0cnVjdCBob3N0ZW50ICpoID0gTlVMTDsKLSAgc3RydWN0IFNlc3Npb25IYW5kbGUgKmRhdGEgPSBjb25uLT5kYXRhOwogICBzdHJ1Y3QgaW5fYWRkciBpbjsKIAogICAqd2FpdHAgPSAwOyAvKiBkZWZhdWx0IHRvIHN5bmNocm9ub3VzIHJlc3BvbnNlICovCkBAIC01NjEsOSArNTUyLDcgQEAKICAgbWVtc2V0KCZoaW50cywgMCwgc2l6ZW9mKGhpbnRzKSk7CiAgIGhpbnRzLmFpX2ZhbWlseSA9IHBmOwogICBoaW50cy5haV9zb2NrdHlwZSA9IGNvbm4tPnNvY2t0eXBlOwotI2lmIDAgLyogcmVtb3ZlZCBub3YgOCAyMDA1IGJlZm9yZSA3LjE1LjEgKi8KLSAgaGludHMuYWlfZmxhZ3MgPSBBSV9DQU5PTk5BTUU7Ci0jZW5kaWYKKwogICBzbnByaW50ZihzYnVmLCBzaXplb2Yoc2J1ZiksICIlZCIsIHBvcnQpOwogCiAgIC8qIGZpcmUgdXAgYSBuZXcgcmVzb2x2ZXIgdGhyZWFkISAqLwpkaWZmIC0tZ2l0IGEvbGliL2h0dHAuYyBiL2xpYi9odHRwLmMKaW5kZXggN2ZmYzM0ZC4uNDEzZWYzZCAxMDA2NDQKLS0tIGEvbGliL2h0dHAuYworKysgYi9saWIvaHR0cC5jCkBAIC05NzcsMTIgKzk3NywxNSBAQAogICogUmV0dXJucyBDVVJMY29kZQogICovCiBDVVJMY29kZSBDdXJsX2FkZF9idWZmZXJfc2VuZChDdXJsX3NlbmRfYnVmZmVyICppbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyAqYnl0ZXNfd3JpdHRlbiwgLyogYWRkIHRoZSBudW1iZXIgb2Ygc2VudCBieXRlcwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIHRoaXMgY291bnRlciAqLwotICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBpbmNsdWRlZF9ib2R5X2J5dGVzLCAvKiBob3cgbXVjaCBvZiB0aGUgYnVmZmVyCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5zIGJvZHkgZGF0YSAqLwotICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzb2NrZXRpbmRleCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGFkZCB0aGUgbnVtYmVyIG9mIHNlbnQgYnl0ZXMgdG8gdGhpcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50ZXIgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgKmJ5dGVzX3dyaXR0ZW4sCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBob3cgbXVjaCBvZiB0aGUgYnVmZmVyIGNvbnRhaW5zIGJvZHkgZGF0YSAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGluY2x1ZGVkX2JvZHlfYnl0ZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc29ja2V0aW5kZXgpCiAKIHsKICAgc3NpemVfdCBhbW91bnQ7CkBAIC0xMDY5LDcgKzEwNzIsMTAgQEAKICAgICAgICAgIGFjY29yZGluZ2x5ICovCiAgICAgICBodHRwLT53cml0ZWJ5dGVjb3VudCArPSBib2R5bGVuOwogCi0gICAgKmJ5dGVzX3dyaXR0ZW4gKz0gYW1vdW50OworICAgIC8qICdhbW91bnQnIGNhbiBuZXZlciBiZSBhIHZlcnkgbGFyZ2UgdmFsdWUgaGVyZSBzbyB0eXBlY2FzdGluZyBpdCBzbyBhCisgICAgICAgc2lnbmVkIDMxIGJpdCB2YWx1ZSBzaG91bGQgbm90IGNhdXNlIHByb2JsZW1zIGV2ZW4gaWYgc3NpemVfdCBpcworICAgICAgIDY0Yml0ICovCisgICAgKmJ5dGVzX3dyaXR0ZW4gKz0gKGxvbmcpYW1vdW50OwogCiAgICAgaWYoaHR0cCkgewogICAgICAgaWYoKHNpemVfdClhbW91bnQgIT0gc2l6ZSkgewpAQCAtMTI4Myw3ICsxMjg5LDYgQEAKICAgc3RydWN0IFNlc3Npb25IYW5kbGUgKmRhdGE9Y29ubi0+ZGF0YTsKICAgc3RydWN0IFNpbmdsZVJlcXVlc3QgKmsgPSAmZGF0YS0+cmVxOwogICBDVVJMY29kZSByZXN1bHQ7Ci0gIGludCByZXM7CiAgIGxvbmcgdGltZW91dCA9CiAgICAgZGF0YS0+c2V0LnRpbWVvdXQ/ZGF0YS0+c2V0LnRpbWVvdXQ6UFJPWFlfVElNRU9VVDsgLyogaW4gbWlsbGlzZWNvbmRzICovCiAgIGN1cmxfc29ja2V0X3QgdHVubmVsc29ja2V0ID0gY29ubi0+c29ja1tzb2NraW5kZXhdOwpAQCAtMTM4MSw3ICsxMzg2LDcgQEAKICAgICAgICAgaWYoQ1VSTEVfT0sgPT0gcmVzdWx0KSB7CiAgICAgICAgICAgLyogTm93IHNlbmQgb2ZmIHRoZSByZXF1ZXN0ICovCiAgICAgICAgICAgcmVzdWx0ID0gQ3VybF9hZGRfYnVmZmVyX3NlbmQocmVxX2J1ZmZlciwgY29ubiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmRhdGEtPmluZm8ucmVxdWVzdF9zaXplLCAwLCBzb2NraW5kZXgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZkYXRhLT5pbmZvLnJlcXVlc3Rfc2l6ZSwgMCwgc29ja2luZGV4KTsKICAgICAgICAgfQogICAgICAgICByZXFfYnVmZmVyID0gTlVMTDsKICAgICAgICAgaWYocmVzdWx0KQpAQCAtMTQ2NywxMSArMTQ3MiwxMCBAQAogICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgIERFQlVHQVNTRVJUKHB0citCVUZTSVpFLW5yZWFkIDw9IGRhdGEtPnN0YXRlLmJ1ZmZlcitCVUZTSVpFKzEpOwotICAgICAgICAgIHJlcyA9IEN1cmxfcmVhZChjb25uLCB0dW5uZWxzb2NrZXQsIHB0ciwgQlVGU0laRS1ucmVhZCwgJmdvdGJ5dGVzKTsKLSAgICAgICAgICBpZihyZXM8IDApCi0gICAgICAgICAgICAvKiBFV09VTERCTE9DSyAqLworICAgICAgICAgIHJlc3VsdCA9IEN1cmxfcmVhZChjb25uLCB0dW5uZWxzb2NrZXQsIHB0ciwgQlVGU0laRS1ucmVhZCwgJmdvdGJ5dGVzKTsKKyAgICAgICAgICBpZihyZXN1bHQ9PUNVUkxFX0FHQUlOKQogICAgICAgICAgICAgY29udGludWU7IC8qIGdvIGxvb3AgeW91cnNlbGYgKi8KLSAgICAgICAgICBlbHNlIGlmKHJlcykKKyAgICAgICAgICBlbHNlIGlmKHJlc3VsdCkKICAgICAgICAgICAgIGtlZXBvbiA9IEZBTFNFOwogICAgICAgICAgIGVsc2UgaWYoZ290Ynl0ZXMgPD0gMCkgewogICAgICAgICAgICAga2VlcG9uID0gRkFMU0U7CkBAIC0xODE3LDkgKzE4MjEsOSBAQAogfQogI2VuZGlmCiAKLSNpZmRlZiBVU0VfU1NMRUFZCi0vKiBUaGlzIGZ1bmN0aW9uIGlzIE9wZW5TU0wtc3BlY2lmaWMuIEl0IHNob3VsZCBiZSBtYWRlIHRvIHF1ZXJ5IHRoZSBnZW5lcmljCi0gICBTU0wgbGF5ZXIgaW5zdGVhZC4gKi8KKyNpZiBkZWZpbmVkKFVTRV9TU0xFQVkpIHx8IGRlZmluZWQoVVNFX0dOVVRMUykKKy8qIFRoaXMgZnVuY3Rpb24gaXMgZm9yIE9wZW5TU0wgYW5kIEdudVRMUyBvbmx5LiBJdCBzaG91bGQgYmUgbWFkZSB0byBxdWVyeQorICAgdGhlIGdlbmVyaWMgU1NMIGxheWVyIGluc3RlYWQuICovCiBzdGF0aWMgaW50IGh0dHBzX2dldHNvY2soc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAogICAgICAgICAgICAgICAgICAgICAgICAgIGN1cmxfc29ja2V0X3QgKnNvY2tzLAogICAgICAgICAgICAgICAgICAgICAgICAgIGludCBudW1zb2NrcykKQEAgLTE4NDQsMTcgKzE4NDgsNiBAQAogICByZXR1cm4gQ1VSTEVfT0s7CiB9CiAjZWxzZQotI2lmZGVmIFVTRV9HTlVUTFMKLXN0YXRpYyBpbnQgaHR0cHNfZ2V0c29jayhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgY3VybF9zb2NrZXRfdCAqc29ja3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgaW50IG51bXNvY2tzKQotewotICAodm9pZCljb25uOwotICAodm9pZClzb2NrczsKLSAgKHZvaWQpbnVtc29ja3M7Ci0gIHJldHVybiBHRVRTT0NLX0JMQU5LOwotfQotI2Vsc2UKICNpZmRlZiBVU0VfTlNTCiBzdGF0aWMgaW50IGh0dHBzX2dldHNvY2soc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAogICAgICAgICAgICAgICAgICAgICAgICAgIGN1cmxfc29ja2V0X3QgKnNvY2tzLApAQCAtMTg3Niw2ICsxODY5LDE3IEBACiAgICh2b2lkKW51bXNvY2tzOwogICByZXR1cm4gR0VUU09DS19CTEFOSzsKIH0KKyNlbHNlCisjaWZkZWYgVVNFX1BPTEFSU1NMCitzdGF0aWMgaW50IGh0dHBzX2dldHNvY2soc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgIGN1cmxfc29ja2V0X3QgKnNvY2tzLAorICAgICAgICAgICAgICAgICAgICAgICAgIGludCBudW1zb2NrcykKK3sKKyAgKHZvaWQpY29ubjsKKyAgKHZvaWQpc29ja3M7CisgICh2b2lkKW51bXNvY2tzOworICByZXR1cm4gR0VUU09DS19CTEFOSzsKK30KICNlbmRpZgogI2VuZGlmCiAjZW5kaWYKQEAgLTIyMjQsNyArMjIyOCwxMCBAQAogICAgIGlmKChjb25uLT5wcm90b2NvbCZQUk9UX0hUVFApICYmCiAgICAgICAgIGRhdGEtPnNldC51cGxvYWQgJiYKICAgICAgICAgKGRhdGEtPnNldC5pbmZpbGVzaXplID09IC0xKSkgewotICAgICAgaWYgKHVzZV9odHRwXzFfMShkYXRhLCBjb25uKSkgeworICAgICAgaWYoY29ubi0+Yml0cy5hdXRobmVnKQorICAgICAgICAvKiBkb24ndCBlbmFibGUgY2h1bmtlZCBkdXJpbmcgYXV0aCBuZWcgKi8KKyAgICAgICAgOworICAgICAgZWxzZSBpZih1c2VfaHR0cF8xXzEoZGF0YSwgY29ubikpIHsKICAgICAgICAgLyogSFRUUCwgdXBsb2FkLCB1bmtub3duIGZpbGUgc2l6ZSBhbmQgbm90IEhUVFAgMS4wICovCiAgICAgICAgIGRhdGEtPnJlcS51cGxvYWRfY2h1bmt5ID0gVFJVRTsKICAgICAgIH0KQEAgLTI1MjksNyArMjUzNiw4IEBACiAgIC8qIHVybCAqLwogICBpZiAocGFzdGVfZnRwX3VzZXJwd2QpCiAgICAgcmVzdWx0ID0gQ3VybF9hZGRfYnVmZmVyZihyZXFfYnVmZmVyLCAiZnRwOi8vJXM6JXNAJXMiLAotICAgICAgICBjb25uLT51c2VyLCBjb25uLT5wYXNzd2QsIHBwYXRoICsgc2l6ZW9mKCJmdHA6Ly8iKSAtIDEpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29ubi0+dXNlciwgY29ubi0+cGFzc3dkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHBhdGggKyBzaXplb2YoImZ0cDovLyIpIC0gMSk7CiAgIGVsc2UKICAgICByZXN1bHQgPSBDdXJsX2FkZF9idWZmZXIocmVxX2J1ZmZlciwgcHBhdGgsIHN0cmxlbihwcGF0aCkpOwogICBpZiAocmVzdWx0KQpAQCAtMjY2NSwxNCArMjY3MywxMyBAQAogICAgICAgICByZXR1cm4gcmVzdWx0OwogCiAgICAgICByZXN1bHQgPSBDdXJsX2FkZF9idWZmZXJfc2VuZChyZXFfYnVmZmVyLCBjb25uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZkYXRhLT5pbmZvLnJlcXVlc3Rfc2l6ZSwgMCwgRklSU1RTT0NLRVQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmRhdGEtPmluZm8ucmVxdWVzdF9zaXplLCAwLCBGSVJTVFNPQ0tFVCk7CiAgICAgICBpZihyZXN1bHQpCiAgICAgICAgIGZhaWxmKGRhdGEsICJGYWlsZWQgc2VuZGluZyBQT1NUIHJlcXVlc3QiKTsKICAgICAgIGVsc2UKICAgICAgICAgLyogc2V0dXAgdmFyaWFibGVzIGZvciB0aGUgdXBjb21pbmcgdHJhbnNmZXIgKi8KLSAgICAgICAgcmVzdWx0ID0gQ3VybF9zZXR1cF90cmFuc2Zlcihjb25uLCBGSVJTVFNPQ0tFVCwgLTEsIFRSVUUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmh0dHAtPnJlYWRieXRlY291bnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEsIE5VTEwpOworICAgICAgICBDdXJsX3NldHVwX3RyYW5zZmVyKGNvbm4sIEZJUlNUU09DS0VULCAtMSwgVFJVRSwgJmh0dHAtPnJlYWRieXRlY291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEsIE5VTEwpOwogICAgICAgYnJlYWs7CiAgICAgfQogCkBAIC0yNzM1LDE1ICsyNzQyLDE0IEBACiAKICAgICAvKiBmaXJlIGF3YXkgdGhlIHdob2xlIHJlcXVlc3QgdG8gdGhlIHNlcnZlciAqLwogICAgIHJlc3VsdCA9IEN1cmxfYWRkX2J1ZmZlcl9zZW5kKHJlcV9idWZmZXIsIGNvbm4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICZkYXRhLT5pbmZvLnJlcXVlc3Rfc2l6ZSwgMCwgRklSU1RTT0NLRVQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZkYXRhLT5pbmZvLnJlcXVlc3Rfc2l6ZSwgMCwgRklSU1RTT0NLRVQpOwogICAgIGlmKHJlc3VsdCkKICAgICAgIGZhaWxmKGRhdGEsICJGYWlsZWQgc2VuZGluZyBQT1NUIHJlcXVlc3QiKTsKICAgICBlbHNlCiAgICAgICAvKiBzZXR1cCB2YXJpYWJsZXMgZm9yIHRoZSB1cGNvbWluZyB0cmFuc2ZlciAqLwotICAgICAgcmVzdWx0ID0gQ3VybF9zZXR1cF90cmFuc2Zlcihjb25uLCBGSVJTVFNPQ0tFVCwgLTEsIFRSVUUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZodHRwLT5yZWFkYnl0ZWNvdW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGSVJTVFNPQ0tFVCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmh0dHAtPndyaXRlYnl0ZWNvdW50KTsKKyAgICAgIEN1cmxfc2V0dXBfdHJhbnNmZXIoY29ubiwgRklSU1RTT0NLRVQsIC0xLCBUUlVFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAmaHR0cC0+cmVhZGJ5dGVjb3VudCwgRklSU1RTT0NLRVQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICZodHRwLT53cml0ZWJ5dGVjb3VudCk7CiAKICAgICBpZihyZXN1bHQpIHsKICAgICAgIEN1cmxfZm9ybWNsZWFuKCZodHRwLT5zZW5kaXQpOyAvKiBmcmVlIHRoYXQgd2hvbGUgbG90ICovCkBAIC0yNzg4LDE1ICsyNzk0LDE0IEBACiAKICAgICAvKiB0aGlzIHNlbmRzIHRoZSBidWZmZXIgYW5kIGZyZWVzIGFsbCB0aGUgYnVmZmVyIHJlc291cmNlcyAqLwogICAgIHJlc3VsdCA9IEN1cmxfYWRkX2J1ZmZlcl9zZW5kKHJlcV9idWZmZXIsIGNvbm4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICZkYXRhLT5pbmZvLnJlcXVlc3Rfc2l6ZSwgMCwgRklSU1RTT0NLRVQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZkYXRhLT5pbmZvLnJlcXVlc3Rfc2l6ZSwgMCwgRklSU1RTT0NLRVQpOwogICAgIGlmKHJlc3VsdCkKICAgICAgIGZhaWxmKGRhdGEsICJGYWlsZWQgc2VuZGluZyBQVVQgcmVxdWVzdCIpOwogICAgIGVsc2UKICAgICAgIC8qIHByZXBhcmUgZm9yIHRyYW5zZmVyICovCi0gICAgICByZXN1bHQgPSBDdXJsX3NldHVwX3RyYW5zZmVyKGNvbm4sIEZJUlNUU09DS0VULCAtMSwgVFJVRSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmh0dHAtPnJlYWRieXRlY291bnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc3RzaXplP0ZJUlNUU09DS0VUOi0xLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3N0c2l6ZT8maHR0cC0+d3JpdGVieXRlY291bnQ6TlVMTCk7CisgICAgICBDdXJsX3NldHVwX3RyYW5zZmVyKGNvbm4sIEZJUlNUU09DS0VULCAtMSwgVFJVRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJmh0dHAtPnJlYWRieXRlY291bnQsIHBvc3RzaXplP0ZJUlNUU09DS0VUOi0xLAorICAgICAgICAgICAgICAgICAgICAgICAgICBwb3N0c2l6ZT8maHR0cC0+d3JpdGVieXRlY291bnQ6TlVMTCk7CiAgICAgaWYocmVzdWx0KQogICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICBicmVhazsKQEAgLTI4ODksNiArMjg5NCw4IEBACiAgICAgICAgIH0KICAgICAgICAgaWYocmVzdWx0KQogICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIC8qIE1ha2Ugc3VyZSB0aGUgcHJvZ3Jlc3MgaW5mb3JtYXRpb24gaXMgYWNjdXJhdGUgKi8KKyAgICAgICAgQ3VybF9wZ3JzU2V0VXBsb2FkU2l6ZShkYXRhLCBwb3N0c2l6ZSk7CiAgICAgICB9CiAgICAgICBlbHNlIHsKICAgICAgICAgLyogQSBodWdlIFBPU1QgY29taW5nIHVwLCBkbyBkYXRhIHNlcGFyYXRlIGZyb20gdGhlIHJlcXVlc3QgKi8KQEAgLTI5MzgsMTYgKzI5NDUsMTQgQEAKICAgICB9CiAgICAgLyogaXNzdWUgdGhlIHJlcXVlc3QgKi8KICAgICByZXN1bHQgPSBDdXJsX2FkZF9idWZmZXJfc2VuZChyZXFfYnVmZmVyLCBjb25uLCAmZGF0YS0+aW5mby5yZXF1ZXN0X3NpemUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzaXplX3QpaW5jbHVkZWRfYm9keSwgRklSU1RTT0NLRVQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzaXplX3QpaW5jbHVkZWRfYm9keSwgRklSU1RTT0NLRVQpOwogCiAgICAgaWYocmVzdWx0KQogICAgICAgZmFpbGYoZGF0YSwgIkZhaWxlZCBzZW5kaW5nIEhUVFAgUE9TVCByZXF1ZXN0Iik7CiAgICAgZWxzZQotICAgICAgcmVzdWx0ID0KLSAgICAgICAgQ3VybF9zZXR1cF90cmFuc2Zlcihjb25uLCBGSVJTVFNPQ0tFVCwgLTEsIFRSVUUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJmh0dHAtPnJlYWRieXRlY291bnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaHR0cC0+cG9zdGRhdGE/RklSU1RTT0NLRVQ6LTEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaHR0cC0+cG9zdGRhdGE/Jmh0dHAtPndyaXRlYnl0ZWNvdW50Ok5VTEwpOworICAgICAgQ3VybF9zZXR1cF90cmFuc2Zlcihjb25uLCBGSVJTVFNPQ0tFVCwgLTEsIFRSVUUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICZodHRwLT5yZWFkYnl0ZWNvdW50LCBodHRwLT5wb3N0ZGF0YT9GSVJTVFNPQ0tFVDotMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaHR0cC0+cG9zdGRhdGE/Jmh0dHAtPndyaXRlYnl0ZWNvdW50Ok5VTEwpOwogICAgIGJyZWFrOwogCiAgIGRlZmF1bHQ6CkBAIC0yOTU3LDE2ICsyOTYyLDE1IEBACiAKICAgICAvKiBpc3N1ZSB0aGUgcmVxdWVzdCAqLwogICAgIHJlc3VsdCA9IEN1cmxfYWRkX2J1ZmZlcl9zZW5kKHJlcV9idWZmZXIsIGNvbm4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICZkYXRhLT5pbmZvLnJlcXVlc3Rfc2l6ZSwgMCwgRklSU1RTT0NLRVQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZkYXRhLT5pbmZvLnJlcXVlc3Rfc2l6ZSwgMCwgRklSU1RTT0NLRVQpOwogCiAgICAgaWYocmVzdWx0KQogICAgICAgZmFpbGYoZGF0YSwgIkZhaWxlZCBzZW5kaW5nIEhUVFAgcmVxdWVzdCIpOwogICAgIGVsc2UKICAgICAgIC8qIEhUVFAgR0VUL0hFQUQgZG93bmxvYWQ6ICovCi0gICAgICByZXN1bHQgPSBDdXJsX3NldHVwX3RyYW5zZmVyKGNvbm4sIEZJUlNUU09DS0VULCAtMSwgVFJVRSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmh0dHAtPnJlYWRieXRlY291bnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh0dHAtPnBvc3RkYXRhP0ZJUlNUU09DS0VUOi0xLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBodHRwLT5wb3N0ZGF0YT8maHR0cC0+d3JpdGVieXRlY291bnQ6TlVMTCk7CisgICAgICBDdXJsX3NldHVwX3RyYW5zZmVyKGNvbm4sIEZJUlNUU09DS0VULCAtMSwgVFJVRSwgJmh0dHAtPnJlYWRieXRlY291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGh0dHAtPnBvc3RkYXRhP0ZJUlNUU09DS0VUOi0xLAorICAgICAgICAgICAgICAgICAgICAgICAgICBodHRwLT5wb3N0ZGF0YT8maHR0cC0+d3JpdGVieXRlY291bnQ6TlVMTCk7CiAgIH0KICAgaWYocmVzdWx0KQogICAgIHJldHVybiByZXN1bHQ7CkBAIC0zMjg5LDEzICszMjkzLDYgQEAKICAgICAgIGRhdGEtPnJlcS5kZWR1Y3RoZWFkZXJjb3VudCA9CiAgICAgICAgICgxMDAgPD0gay0+aHR0cGNvZGUgJiYgMTk5ID49IGstPmh0dHBjb2RlKT9kYXRhLT5yZXEuaGVhZGVyYnl0ZWNvdW50OjA7CiAKLSAgICAgIGlmKGRhdGEtPnN0YXRlLnJlc3VtZV9mcm9tICYmCi0gICAgICAgICAoZGF0YS0+c2V0Lmh0dHByZXE9PUhUVFBSRVFfR0VUKSAmJgotICAgICAgICAgKGstPmh0dHBjb2RlID09IDQxNikpIHsKLSAgICAgICAgLyogIlJlcXVlc3RlZCBSYW5nZSBOb3QgU2F0aXNmaWFibGUiICovCi0gICAgICAgICpzdG9wX3JlYWRpbmcgPSBUUlVFOwotICAgICAgfQotCiAgICAgICBpZighKnN0b3BfcmVhZGluZykgewogICAgICAgICAvKiBDdXJsX2h0dHBfYXV0aF9hY3QoKSBjaGVja3Mgd2hhdCBhdXRoZW50aWNhdGlvbiBtZXRob2RzCiAgICAgICAgICAqIHRoYXQgYXJlIGF2YWlsYWJsZSBhbmQgZGVjaWRlcyB3aGljaCBvbmUgKGlmIGFueSkgdG8KQEAgLTM1MDgsOSArMzUwNSw2IEBACiAgICAgICAgICAgICogbWVzc2FnZS1ib2R5LCBhbmQgdGh1cyBpcyBhbHdheXMgdGVybWluYXRlZCBieSB0aGUgZmlyc3QKICAgICAgICAgICAgKiBlbXB0eSBsaW5lIGFmdGVyIHRoZSBoZWFkZXIgZmllbGRzLiAqLwogICAgICAgICAgIC8qIEZBTExUSFJPVUdIICovCi0gICAgICAgIGNhc2UgNDE2OiAvKiBSZXF1ZXN0ZWQgUmFuZ2UgTm90IFNhdGlzZmlhYmxlLCBpdCBoYXMgdGhlCi0gICAgICAgICAgICAgICAgICAgICBDb250ZW50LUxlbmd0aDogc2V0IGFzIHRoZSAicmVhbCIgZG9jdW1lbnQgYnV0IG5vCi0gICAgICAgICAgICAgICAgICAgICBhY3R1YWwgcmVzcG9uc2UgaXMgc2VudC4gKi8KICAgICAgICAgY2FzZSAzMDQ6CiAgICAgICAgICAgLyogKHF1b3RlIGZyb20gUkZDMjYxNiwgc2VjdGlvbiAxMC4zLjUpOiBUaGUgMzA0IHJlc3BvbnNlCiAgICAgICAgICAgICogTVVTVCBOT1QgY29udGFpbiBhIG1lc3NhZ2UtYm9keSwgYW5kIHRodXMgaXMgYWx3YXlzCkBAIC0zNTQyLDEwICszNTM2LDcgQEAKICAgICAvKiBDdXJsX2NvbnZlcnRfZnJvbV9uZXR3b3JrIGNhbGxzIGZhaWxmIGlmIHVuc3VjY2Vzc2Z1bCAqLwogI2VuZGlmIC8qIENVUkxfRE9FU19DT05WRVJTSU9OUyAqLwogCi0gICAgLyogQ2hlY2sgZm9yIENvbnRlbnQtTGVuZ3RoOiBoZWFkZXIgbGluZXMgdG8gZ2V0IHNpemUuIElnbm9yZQotICAgICAgIHRoZSBoZWFkZXIgY29tcGxldGVseSBpZiB3ZSBnZXQgYSA0MTYgcmVzcG9uc2UgYXMgdGhlbiB3ZSdyZQotICAgICAgIHJlc3VtaW5nIGEgZG9jdW1lbnQgdGhhdCB3ZSBkb24ndCBnZXQsIGFuZCB0aGlzIGhlYWRlciBjb250YWlucwotICAgICAgIGluZm8gYWJvdXQgdGhlIHRydWUgc2l6ZSBvZiB0aGUgZG9jdW1lbnQgd2UgZGlkbid0IGdldCBub3cuICovCisgICAgLyogQ2hlY2sgZm9yIENvbnRlbnQtTGVuZ3RoOiBoZWFkZXIgbGluZXMgdG8gZ2V0IHNpemUgKi8KICAgICBpZighay0+aWdub3JlY2wgJiYgIWRhdGEtPnNldC5pZ25vcmVjbCAmJgogICAgICAgIGNoZWNrcHJlZml4KCJDb250ZW50LUxlbmd0aDoiLCBrLT5wKSkgewogICAgICAgY3VybF9vZmZfdCBjb250ZW50bGVuZ3RoID0gY3VybHhfc3RydG9vZmZ0KGstPnArMTUsIE5VTEwsIDEwKTsKQEAgLTM2NDMsMjAgKzM2MzQsNiBAQAogICAgICAgLyogaW5pdCBvdXIgY2h1bmt5IGVuZ2luZSAqLwogICAgICAgQ3VybF9odHRwY2h1bmtfaW5pdChjb25uKTsKICAgICB9Ci0KLSAgICBlbHNlIGlmKGNoZWNrcHJlZml4KCJUcmFpbGVyOiIsIGstPnApIHx8Ci0gICAgICAgICAgICBjaGVja3ByZWZpeCgiVHJhaWxlcnM6Iiwgay0+cCkpIHsKLSAgICAgIC8qCi0gICAgICAgKiBUaGlzIHRlc3QgaGVscHMgQ3VybF9odHRwY2h1bmtfcmVhZCgpIHRvIGRldGVybWluZSB0byBsb29rCi0gICAgICAgKiBmb3Igd2VsbCBmb3JtZWQgdHJhaWxlcnMgYWZ0ZXIgdGhlIHplcm8gY2h1bmtzaXplIHJlY29yZC4gSW4KLSAgICAgICAqIHRoaXMgY2FzZSBhIENSTEYgaXMgcmVxdWlyZWQgYWZ0ZXIgdGhlIHplcm8gY2h1bmtzaXplIHJlY29yZAotICAgICAgICogd2hlbiBubyB0cmFpbGVycyBhcmUgc2VudCwgb3IgYWZ0ZXIgdGhlIGxhc3QgdHJhaWxlciByZWNvcmQuCi0gICAgICAgKgotICAgICAgICogSXQgc2VlbXMgYm90aCBUcmFpbGVyOiBhbmQgVHJhaWxlcnM6IG9jY3VyIGluIHRoZSB3aWxkLgotICAgICAgICovCi0gICAgICBrLT50cmFpbGVyaGRycHJlc2VudCA9IFRSVUU7Ci0gICAgfQotCiAgICAgZWxzZSBpZihjaGVja3ByZWZpeCgiQ29udGVudC1FbmNvZGluZzoiLCBrLT5wKSAmJgogICAgICAgICAgICAgZGF0YS0+c2V0LnN0cltTVFJJTkdfRU5DT0RJTkddKSB7CiAgICAgICAvKgpkaWZmIC0tZ2l0IGEvbGliL2h0dHAuaCBiL2xpYi9odHRwLmgKaW5kZXggYjdjMWFiZi4uMzAwN2MzMSAxMDA2NDQKLS0tIGEvbGliL2h0dHAuaAorKysgYi9saWIvaHR0cC5oCkBAIC01NiwxMSArNTYsMTAgQEAKIENVUkxjb2RlIEN1cmxfYWRkX2J1ZmZlcmYoQ3VybF9zZW5kX2J1ZmZlciAqaW4sIGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsKIENVUkxjb2RlIEN1cmxfYWRkX2J1ZmZlcihDdXJsX3NlbmRfYnVmZmVyICppbiwgY29uc3Qgdm9pZCAqaW5wdHIsIHNpemVfdCBzaXplKTsKIENVUkxjb2RlIEN1cmxfYWRkX2J1ZmZlcl9zZW5kKEN1cmxfc2VuZF9idWZmZXIgKmluLAotICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKLSAgICAgICAgICAgICAgICAgICAgICAgICBsb25nICpieXRlc193cml0dGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBpbmNsdWRlZF9ib2R5X2J5dGVzLAotICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzb2NrZXRpbmRleCk7Ci0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgKmJ5dGVzX3dyaXR0ZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgaW5jbHVkZWRfYm9keV9ieXRlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzb2NrZXRpbmRleCk7CiAKIENVUkxjb2RlIEN1cmxfYWRkX3RpbWVjb25kaXRpb24oc3RydWN0IFNlc3Npb25IYW5kbGUgKmRhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEN1cmxfc2VuZF9idWZmZXIgKmJ1Zik7CmRpZmYgLS1naXQgYS9saWIvaHR0cF9jaHVua3MuYyBiL2xpYi9odHRwX2NodW5rcy5jCmluZGV4IGE2NmY4NzIuLjBkNDE5NzkgMTAwNjQ0Ci0tLSBhL2xpYi9odHRwX2NodW5rcy5jCisrKyBiL2xpYi9odHRwX2NodW5rcy5jCkBAIC0xODQsMjIgKzE4NCw4IEBACiAgICAgICBpZigqZGF0YXAgPT0gMHgwYSkgewogICAgICAgICAvKiB3ZSdyZSBub3cgZXhwZWN0aW5nIGRhdGEgdG8gY29tZSwgdW5sZXNzIHNpemUgd2FzIHplcm8hICovCiAgICAgICAgIGlmKDAgPT0gY2gtPmRhdGFzaXplKSB7Ci0gICAgICAgICAgaWYoay0+dHJhaWxlcmhkcnByZXNlbnQhPVRSVUUpIHsKLSAgICAgICAgICAgIC8qIE5vIFRyYWlsZXI6IGhlYWRlciBmb3VuZCAtIHJldmVydCB0byBvcmlnaW5hbCBDdXJsIHByb2Nlc3NpbmcgKi8KLSAgICAgICAgICAgIGNoLT5zdGF0ZSA9IENIVU5LX1NUT1BDUjsKLQotICAgICAgICAgICAgLyogV2UgbmVlZCB0byBpbmNyZW1lbnQgdGhlIGRhdGFwIGhlcmUgc2luY2Ugd2UgYnlwYXNzIHRoZQotICAgICAgICAgICAgICAgaW5jcmVtZW50IGJlbG93IHdpdGggdGhlIGltbWVkaWF0ZSBicmVhayAqLwotICAgICAgICAgICAgbGVuZ3RoLS07Ci0gICAgICAgICAgICBkYXRhcCsrOwotCi0gICAgICAgICAgICAvKiBUaGlzIGlzIHRoZSBmaW5hbCBieXRlLCBjb250aW51ZSB0byByZWFkIHRoZSBmaW5hbCBDUkxGICovCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBjaC0+c3RhdGUgPSBDSFVOS19UUkFJTEVSOyAvKiBhdHRlbXB0IHRvIHJlYWQgdHJhaWxlcnMgKi8KLSAgICAgICAgICAgIGNvbm4tPnRybFBvcz0wOwotICAgICAgICAgIH0KKyAgICAgICAgICBjaC0+c3RhdGUgPSBDSFVOS19UUkFJTEVSOyAvKiBub3cgY2hlY2sgZm9yIHRyYWlsZXJzICovCisgICAgICAgICAgY29ubi0+dHJsUG9zPTA7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgY2gtPnN0YXRlID0gQ0hVTktfREFUQTsKQEAgLTI4MCw5ICsyNjYsOSBAQAogICAgICAgICBkYXRhcCsrOwogICAgICAgICBsZW5ndGgtLTsKICAgICAgIH0KLSAgICAgIGVsc2UgeworICAgICAgZWxzZQogICAgICAgICByZXR1cm4gQ0hVTktFX0JBRF9DSFVOSzsKLSAgICAgIH0KKwogICAgICAgYnJlYWs7CiAKICAgICBjYXNlIENIVU5LX1BPU1RMRjoKQEAgLTI5NSw0NCArMjgxLDc2IEBACiAgICAgICAgIGRhdGFwKys7CiAgICAgICAgIGxlbmd0aC0tOwogICAgICAgfQotICAgICAgZWxzZSB7CisgICAgICBlbHNlCiAgICAgICAgIHJldHVybiBDSFVOS0VfQkFEX0NIVU5LOwotICAgICAgfQogCiAgICAgICBicmVhazsKIAogICAgIGNhc2UgQ0hVTktfVFJBSUxFUjoKLSAgICAgIC8qIGNvbm4tPnRyYWlsZXIgaXMgYXNzdW1lZCB0byBiZSBmcmVlZCBpbiB1cmwuYyBvbiBhCi0gICAgICAgICBjb25uZWN0aW9uIGJhc2lzICovCi0gICAgICBpZihjb25uLT50cmxQb3MgPj0gY29ubi0+dHJsTWF4KSB7Ci0gICAgICAgIC8qIGluIHRoaXMgbG9naWMgd2UgYWx3YXlzIGFsbG9jYXRlIG9uZSBieXRlIG1vcmUgdGhhbiB0cmxNYXgKLSAgICAgICAgICAgY29udGFpbnMsIGp1c3QgYmVjYXVzZSBDSFVOS19UUkFJTEVSX1BPU1RDUiB3aWxsIGFwcGVuZCB0d28gYnl0ZXMKLSAgICAgICAgICAgc28gd2UgbmVlZCB0byBtYWtlIHN1cmUgd2UgaGF2ZSByb29tIGZvciBhbiBleHRyYSBieXRlICovCi0gICAgICAgIGNoYXIgKnB0cjsKLSAgICAgICAgaWYoY29ubi0+dHJsTWF4KSB7Ci0gICAgICAgICAgY29ubi0+dHJsTWF4ICo9IDI7Ci0gICAgICAgICAgcHRyID0gcmVhbGxvYyhjb25uLT50cmFpbGVyLCBjb25uLT50cmxNYXggKyAxKTsKKyAgICAgIGlmKCpkYXRhcCA9PSAweDBkKSB7CisgICAgICAgIC8qIHRoaXMgaXMgdGhlIGVuZCBvZiBhIHRyYWlsZXIsIGJ1dCBpZiB0aGUgdHJhaWxlciB3YXMgemVybyBieXRlcworICAgICAgICAgICB0aGVyZSB3YXMgbm8gdHJhaWxlciBhbmQgd2UgbW92ZSBvbiAqLworCisgICAgICAgIGlmKGNvbm4tPnRybFBvcykgeworICAgICAgICAgIC8qIHdlIGFsbG9jYXRlIHRyYWlsZXIgd2l0aCAzIGJ5dGVzIGV4dHJhIHJvb20gdG8gZml0IHRoaXMgKi8KKyAgICAgICAgICBjb25uLT50cmFpbGVyW2Nvbm4tPnRybFBvcysrXT0weDBkOworICAgICAgICAgIGNvbm4tPnRyYWlsZXJbY29ubi0+dHJsUG9zKytdPTB4MGE7CisgICAgICAgICAgY29ubi0+dHJhaWxlcltjb25uLT50cmxQb3NdPTA7CisKKyNpZmRlZiBDVVJMX0RPRVNfQ09OVkVSU0lPTlMKKyAgICAgICAgICAvKiBDb252ZXJ0IHRvIGhvc3QgZW5jb2RpbmcgYmVmb3JlIGNhbGxpbmcgQ3VybF9jbGllbnRfd3JpdGUgKi8KKyAgICAgICAgICByZXN1bHQgPSBDdXJsX2NvbnZlcnRfZnJvbV9uZXR3b3JrKGNvbm4tPmRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25uLT50cmFpbGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29ubi0+dHJsUG9zKTsKKyAgICAgICAgICBpZihyZXN1bHQgIT0gQ1VSTEVfT0spCisgICAgICAgICAgICAvKiBDdXJsX2NvbnZlcnRfZnJvbV9uZXR3b3JrIGNhbGxzIGZhaWxmIGlmIHVuc3VjY2Vzc2Z1bCAqLworICAgICAgICAgICAgLyogVHJlYXQgaXQgYXMgYSBiYWQgY2h1bmsgKi8KKyAgICAgICAgICAgIHJldHVybiBDSFVOS0VfQkFEX0NIVU5LOworCisjZW5kaWYgLyogQ1VSTF9ET0VTX0NPTlZFUlNJT05TICovCisgICAgICAgICAgaWYoIWRhdGEtPnNldC5odHRwX3RlX3NraXApIHsKKyAgICAgICAgICAgIHJlc3VsdCA9IEN1cmxfY2xpZW50X3dyaXRlKGNvbm4sIENMSUVOVFdSSVRFX0hFQURFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbm4tPnRyYWlsZXIsIGNvbm4tPnRybFBvcyk7CisgICAgICAgICAgICBpZihyZXN1bHQpCisgICAgICAgICAgICAgIHJldHVybiBDSFVOS0VfV1JJVEVfRVJST1I7CisgICAgICAgICAgfQorICAgICAgICAgIGNvbm4tPnRybFBvcz0wOworICAgICAgICAgIGNoLT5zdGF0ZSA9IENIVU5LX1RSQUlMRVJfQ1I7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgY29ubi0+dHJsTWF4PTEyODsKLSAgICAgICAgICBwdHIgPSBtYWxsb2MoY29ubi0+dHJsTWF4ICsgMSk7CisgICAgICAgICAgLyogbm8gdHJhaWxlciwgd2UncmUgb24gdGhlIGZpbmFsIENSTEYgcGFpciAqLworICAgICAgICAgIGNoLT5zdGF0ZSA9IENIVU5LX1RSQUlMRVJfUE9TVENSOworICAgICAgICAgIGJyZWFrOyAvKiBkb24ndCBhZHZhbmNlIHRoZSBwb2ludGVyICovCiAgICAgICAgIH0KLSAgICAgICAgaWYoIXB0cikKLSAgICAgICAgICByZXR1cm4gQ0hVTktFX09VVF9PRl9NRU1PUlk7Ci0gICAgICAgIGNvbm4tPnRyYWlsZXIgPSBwdHI7CiAgICAgICB9Ci0gICAgICBjb25uLT50cmFpbGVyW2Nvbm4tPnRybFBvcysrXT0qZGF0YXA7Ci0KLSAgICAgIGlmKCpkYXRhcCA9PSAweDBkKQotICAgICAgICBjaC0+c3RhdGUgPSBDSFVOS19UUkFJTEVSX0NSOwogICAgICAgZWxzZSB7Ci0gICAgICAgIGRhdGFwKys7Ci0gICAgICAgIGxlbmd0aC0tOworICAgICAgICAvKiBjb25uLT50cmFpbGVyIGlzIGFzc3VtZWQgdG8gYmUgZnJlZWQgaW4gdXJsLmMgb24gYQorICAgICAgICAgICBjb25uZWN0aW9uIGJhc2lzICovCisgICAgICAgIGlmKGNvbm4tPnRybFBvcyA+PSBjb25uLT50cmxNYXgpIHsKKyAgICAgICAgICAvKiB3ZSBhbHdheXMgYWxsb2NhdGUgdGhyZWUgZXh0cmEgYnl0ZXMsIGp1c3QgYmVjYXVzZSB3aGVuIHRoZSBmdWxsCisgICAgICAgICAgICAgaGVhZGVyIGhhcyBiZWVuIHJlY2VpdmVkIHdlIGFwcGVuZCBDUkxGXDAgKi8KKyAgICAgICAgICBjaGFyICpwdHI7CisgICAgICAgICAgaWYoY29ubi0+dHJsTWF4KSB7CisgICAgICAgICAgICBjb25uLT50cmxNYXggKj0gMjsKKyAgICAgICAgICAgIHB0ciA9IHJlYWxsb2MoY29ubi0+dHJhaWxlciwgY29ubi0+dHJsTWF4ICsgMyk7CisgICAgICAgICAgfQorICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgY29ubi0+dHJsTWF4PTEyODsKKyAgICAgICAgICAgIHB0ciA9IG1hbGxvYyhjb25uLT50cmxNYXggKyAzKTsKKyAgICAgICAgICB9CisgICAgICAgICAgaWYoIXB0cikKKyAgICAgICAgICAgIHJldHVybiBDSFVOS0VfT1VUX09GX01FTU9SWTsKKyAgICAgICAgICBjb25uLT50cmFpbGVyID0gcHRyOworICAgICAgICB9CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiTU9POiAlY1xuIiwgKmRhdGFwKTsKKyAgICAgICAgY29ubi0+dHJhaWxlcltjb25uLT50cmxQb3MrK109KmRhdGFwOwogICAgICAgfQorICAgICAgZGF0YXArKzsKKyAgICAgIGxlbmd0aC0tOwogICAgICAgYnJlYWs7CiAKICAgICBjYXNlIENIVU5LX1RSQUlMRVJfQ1I6Ci0gICAgICBpZigqZGF0YXAgPT0gMHgwZCkgeworICAgICAgaWYoKmRhdGFwID09IDB4MGEpIHsKICAgICAgICAgY2gtPnN0YXRlID0gQ0hVTktfVFJBSUxFUl9QT1NUQ1I7CiAgICAgICAgIGRhdGFwKys7CiAgICAgICAgIGxlbmd0aC0tOwpAQCAtMzQyLDQ4ICszNjAsMTcgQEAKICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBDSFVOS19UUkFJTEVSX1BPU1RDUjoKLSAgICAgIGlmKCpkYXRhcCA9PSAweDBhKSB7Ci0gICAgICAgIGNvbm4tPnRyYWlsZXJbY29ubi0+dHJsUG9zKytdPTB4MGE7Ci0gICAgICAgIGNvbm4tPnRyYWlsZXJbY29ubi0+dHJsUG9zXT0wOwotICAgICAgICBpZihjb25uLT50cmxQb3M9PTIpIHsKLSAgICAgICAgICBjaC0+c3RhdGUgPSBDSFVOS19TVE9QOwotICAgICAgICAgIGxlbmd0aC0tOwotCi0gICAgICAgICAgLyoKLSAgICAgICAgICAgKiBOb3RlIHRoYXQgdGhpcyBjYXNlIHNraXBzIG92ZXIgdGhlIGZpbmFsIFNUT1Agc3RhdGVzIHNpbmNlIHdlJ3ZlCi0gICAgICAgICAgICogYWxyZWFkeSByZWFkIHRoZSBmaW5hbCBDUkxGIGFuZCBuZWVkIHRvIHJldHVybgotICAgICAgICAgICAqLwotCi0gICAgICAgICAgY2gtPmRhdGFsZWZ0ID0gbGVuZ3RoOwotCi0gICAgICAgICAgcmV0dXJuIENIVU5LRV9TVE9QOyAvKiByZXR1cm4gc3RvcCAqLwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgewotI2lmZGVmIENVUkxfRE9FU19DT05WRVJTSU9OUwotICAgICAgICAgIC8qIENvbnZlcnQgdG8gaG9zdCBlbmNvZGluZyBiZWZvcmUgY2FsbGluZyBDdXJsX2NsaWVudF93cml0ZSAqLwotICAgICAgICAgIHJlc3VsdCA9IEN1cmxfY29udmVydF9mcm9tX25ldHdvcmsoY29ubi0+ZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbm4tPnRyYWlsZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25uLT50cmxQb3MpOwotICAgICAgICAgIGlmKHJlc3VsdCAhPSBDVVJMRV9PSykgewotICAgICAgICAgICAgLyogQ3VybF9jb252ZXJ0X2Zyb21fbmV0d29yayBjYWxscyBmYWlsZiBpZiB1bnN1Y2Nlc3NmdWwgKi8KLSAgICAgICAgICAgIC8qIFRyZWF0IGl0IGFzIGEgYmFkIGNodW5rICovCi0gICAgICAgICAgICByZXR1cm4oQ0hVTktFX0JBRF9DSFVOSyk7Ci0gICAgICAgICAgfQotI2VuZGlmIC8qIENVUkxfRE9FU19DT05WRVJTSU9OUyAqLwotICAgICAgICAgIGlmKCFkYXRhLT5zZXQuaHR0cF90ZV9za2lwKSB7Ci0gICAgICAgICAgICByZXN1bHQgPSBDdXJsX2NsaWVudF93cml0ZShjb25uLCBDTElFTlRXUklURV9IRUFERVIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25uLT50cmFpbGVyLCBjb25uLT50cmxQb3MpOwotICAgICAgICAgICAgaWYocmVzdWx0KQotICAgICAgICAgICAgICByZXR1cm4gQ0hVTktFX1dSSVRFX0VSUk9SOwotICAgICAgICAgIH0KLSAgICAgICAgfQorICAgICAgLyogV2UgZW50ZXIgdGhpcyBzdGF0ZSB3aGVuIGEgQ1Igc2hvdWxkIGFycml2ZSBzbyB3ZSBleHBlY3QgdG8KKyAgICAgICAgIGhhdmUgdG8gZmlyc3QgcGFzcyBhIENSIGJlZm9yZSB3ZSB3YWl0IGZvciBMRiAqLworICAgICAgaWYoKmRhdGFwICE9IDB4MGQpIHsKKyAgICAgICAgLyogbm90IGEgQ1IgdGhlbiBpdCBtdXN0IGJlIGFub3RoZXIgaGVhZGVyIGluIHRoZSB0cmFpbGVyICovCiAgICAgICAgIGNoLT5zdGF0ZSA9IENIVU5LX1RSQUlMRVI7Ci0gICAgICAgIGNvbm4tPnRybFBvcz0wOwotICAgICAgICBkYXRhcCsrOwotICAgICAgICBsZW5ndGgtLTsKKyAgICAgICAgYnJlYWs7CiAgICAgICB9Ci0gICAgICBlbHNlCi0gICAgICAgIHJldHVybiBDSFVOS0VfQkFEX0NIVU5LOworICAgICAgZGF0YXArKzsKKyAgICAgIGxlbmd0aC0tOworICAgICAgLyogbm93IHdhaXQgZm9yIHRoZSBmaW5hbCBMRiAqLworICAgICAgY2gtPnN0YXRlID0gQ0hVTktfU1RPUDsKICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBDSFVOS19TVE9QQ1I6CkBAIC0zOTQsOSArMzgxLDggQEAKICAgICAgICAgZGF0YXArKzsKICAgICAgICAgbGVuZ3RoLS07CiAgICAgICB9Ci0gICAgICBlbHNlIHsKKyAgICAgIGVsc2UKICAgICAgICAgcmV0dXJuIENIVU5LRV9CQURfQ0hVTks7Ci0gICAgICB9CiAgICAgICBicmVhazsKIAogICAgIGNhc2UgQ0hVTktfU1RPUDoKQEAgLTQwOSw5ICszOTUsOCBAQAogICAgICAgICBjaC0+ZGF0YWxlZnQgPSBsZW5ndGg7CiAgICAgICAgIHJldHVybiBDSFVOS0VfU1RPUDsgLyogcmV0dXJuIHN0b3AgKi8KICAgICAgIH0KLSAgICAgIGVsc2UgeworICAgICAgZWxzZQogICAgICAgICByZXR1cm4gQ0hVTktFX0JBRF9DSFVOSzsKLSAgICAgIH0KIAogICAgIGRlZmF1bHQ6CiAgICAgICByZXR1cm4gQ0hVTktFX1NUQVRFX0VSUk9SOwpkaWZmIC0tZ2l0IGEvbGliL2h0dHBfZGlnZXN0LmMgYi9saWIvaHR0cF9kaWdlc3QuYwppbmRleCBmZjM4NzFjLi5iZTQwZmM3IDEwMDY0NAotLS0gYS9saWIvaHR0cF9kaWdlc3QuYworKysgYi9saWIvaHR0cF9kaWdlc3QuYwpAQCAtNSw3ICs1LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDA5LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpAQCAtMTI5LDcgKzEyOSw2IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmhlYWRlcikgLyogcmVzdCBvZiB0aGUgKi1hdXRoZW50aWNhdGU6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyICovCiB7Ci0gIGJvb2wgbW9yZSA9IFRSVUU7CiAgIGNoYXIgKnRva2VuID0gTlVMTDsKICAgY2hhciAqdG1wID0gTlVMTDsKICAgYm9vbCBmb3VuZEF1dGggPSBGQUxTRTsKQEAgLTE1OSw3ICsxNTgsNyBAQAogICAgIC8qIGNsZWFyIG9mZiBhbnkgZm9ybWVyIGxlZnRvdmVycyBhbmQgaW5pdCB0byBkZWZhdWx0cyAqLwogICAgIEN1cmxfZGlnZXN0X2NsZWFudXBfb25lKGQpOwogCi0gICAgd2hpbGUobW9yZSkgeworICAgIHdoaWxlKDEpIHsKICAgICAgIGNoYXIgdmFsdWVbTUFYX1ZBTFVFX0xFTkdUSF07CiAgICAgICBjaGFyIGNvbnRlbnRbTUFYX0NPTlRFTlRfTEVOR1RIXTsKIApkaWZmIC0tZ2l0IGEvbGliL2h0dHBfbmVnb3RpYXRlLmMgYi9saWIvaHR0cF9uZWdvdGlhdGUuYwppbmRleCA5NTZmNzM0Li44MGIwYjUwIDEwMDY0NAotLS0gYS9saWIvaHR0cF9uZWdvdGlhdGUuYworKysgYi9saWIvaHR0cF9uZWdvdGlhdGUuYwpAQCAtNSw3ICs1LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDA5LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpAQCAtMjc3LDYgKzI3Nyw3IEBACiAgICAgJmNvbm4tPmRhdGEtPnN0YXRlLm5lZ290aWF0ZTsKICAgY2hhciAqZW5jb2RlZCA9IE5VTEw7CiAgIHNpemVfdCBsZW47CisgIGNoYXIgKnVzZXJwOwogCiAjaWZkZWYgSEFWRV9TUE5FR08gLyogSGFuZGxlIFNQTkVHTyAqLwogICBpZihjaGVja3ByZWZpeCgiTmVnb3RpYXRlIiwgbmVnX2N0eC0+cHJvdG9jb2wpKSB7CkBAIC0zMDUsOSArMzA2LDE1IEBACiAgICAgICBpbmZvZihjb25uLT5kYXRhLCAiTWFrZSBTUE5FR08gSW5pdGlhbCBUb2tlbiBmYWlsZWRcbiIpOwogICAgIH0KICAgICBlbHNlIHsKLSAgICAgIGZyZWUobmVnX2N0eC0+b3V0cHV0X3Rva2VuLnZhbHVlKTsKKyAgICAgIGZyZWUocmVzcG9uc2VUb2tlbik7CiAgICAgICByZXNwb25zZVRva2VuID0gTlVMTDsKKyAgICAgIGZyZWUobmVnX2N0eC0+b3V0cHV0X3Rva2VuLnZhbHVlKTsKICAgICAgIG5lZ19jdHgtPm91dHB1dF90b2tlbi52YWx1ZSA9IG1hbGxvYyhzcG5lZ29Ub2tlbkxlbmd0aCk7CisgICAgICBpZihuZWdfY3R4LT5vdXRwdXRfdG9rZW4udmFsdWUgPT0gTlVMTCkgeworICAgICAgICBmcmVlKHNwbmVnb1Rva2VuKTsKKyAgICAgICAgc3BuZWdvVG9rZW4gPSBOVUxMOworICAgICAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKKyAgICAgIH0KICAgICAgIG1lbWNweShuZWdfY3R4LT5vdXRwdXRfdG9rZW4udmFsdWUsIHNwbmVnb1Rva2VuLHNwbmVnb1Rva2VuTGVuZ3RoKTsKICAgICAgIG5lZ19jdHgtPm91dHB1dF90b2tlbi5sZW5ndGggPSBzcG5lZ29Ub2tlbkxlbmd0aDsKICAgICAgIGZyZWUoc3BuZWdvVG9rZW4pOwpAQCAtMzI0LDEyICszMzEsMTYgQEAKICAgaWYobGVuID09IDApCiAgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CiAKLSAgY29ubi0+YWxsb2NwdHIudXNlcnB3ZCA9Ci0gICAgYXByaW50ZigiJXNBdXRob3JpemF0aW9uOiAlcyAlc1xyXG4iLCBwcm94eSA/ICJQcm94eS0iIDogIiIsCi0gICAgICAgICAgICBuZWdfY3R4LT5wcm90b2NvbCwgZW5jb2RlZCk7CisgIHVzZXJwID0gYXByaW50ZigiJXNBdXRob3JpemF0aW9uOiAlcyAlc1xyXG4iLCBwcm94eSA/ICJQcm94eS0iIDogIiIsCisgICAgICAgICAgICAgICAgICBuZWdfY3R4LT5wcm90b2NvbCwgZW5jb2RlZCk7CisKKyAgaWYocHJveHkpCisgICAgY29ubi0+YWxsb2NwdHIucHJveHl1c2VycHdkID0gdXNlcnA7CisgIGVsc2UKKyAgICBjb25uLT5hbGxvY3B0ci51c2VycHdkID0gdXNlcnA7CiAgIGZyZWUoZW5jb2RlZCk7CiAgIEN1cmxfY2xlYW51cF9uZWdvdGlhdGUgKGNvbm4tPmRhdGEpOwotICByZXR1cm4gKGNvbm4tPmFsbG9jcHRyLnVzZXJwd2QgPT0gTlVMTCkgPyBDVVJMRV9PVVRfT0ZfTUVNT1JZIDogQ1VSTEVfT0s7CisgIHJldHVybiAodXNlcnAgPT0gTlVMTCkgPyBDVVJMRV9PVVRfT0ZfTUVNT1JZIDogQ1VSTEVfT0s7CiB9CiAKIHN0YXRpYyB2b2lkIGNsZWFudXAoc3RydWN0IG5lZ290aWF0ZWRhdGEgKm5lZ19jdHgpCmRpZmYgLS1naXQgYS9saWIvaHR0cF9udGxtLmMgYi9saWIvaHR0cF9udGxtLmMKaW5kZXggMzZlNTM4ZS4uZjViNjk2YSAxMDA2NDQKLS0tIGEvbGliL2h0dHBfbnRsbS5jCisrKyBiL2xpYi9odHRwX250bG0uYwpAQCAtNTgsNiArNTgsNyBAQAogI2luY2x1ZGUgImN1cmxfYmFzZTY0LmgiCiAjaW5jbHVkZSAiaHR0cF9udGxtLmgiCiAjaW5jbHVkZSAidXJsLmgiCisjaW5jbHVkZSAiY3VybF9nZXRob3N0bmFtZS5oIgogI2luY2x1ZGUgImN1cmxfbWVtb3J5LmgiCiAKICNkZWZpbmUgX01QUklOVEZfUkVQTEFDRSAvKiB1c2Ugb3VyIGZ1bmN0aW9ucyBvbmx5ICovCkBAIC0xMTYsNiArMTE3LDE1IEBACiAjZGVmaW5lIE1ENV9ESUdFU1RfTEVOR1RIIDE2CiAjZGVmaW5lIE1ENF9ESUdFU1RfTEVOR1RIIDE2CiAKKyNlbGlmIGRlZmluZWQoVVNFX05TUykKKworI2luY2x1ZGUgImN1cmxfbWQ0LmgiCisjaW5jbHVkZSAibnNzZy5oIgorI2luY2x1ZGUgPG5zcy5oPgorI2luY2x1ZGUgPHBrMTFwdWIuaD4KKyNpbmNsdWRlIDxoYXNodC5oPgorI2RlZmluZSBNRDVfRElHRVNUX0xFTkdUSCBNRDVfTEVOR1RICisKICNlbGlmIGRlZmluZWQoVVNFX1dJTkRPV1NfU1NQSSkKIAogI2luY2x1ZGUgImN1cmxfc3NwaS5oIgpAQCAtMjUwLDYgKzI2MCwxMSBAQAogICBzdGF0aWMgY29uc3QgY2hhciB0eXBlMl9tYXJrZXJbXSA9IHsgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCB9OwogI2VuZGlmCiAKKyNpZmRlZiBVU0VfTlNTCisgIGlmKENVUkxFX09LICE9IEN1cmxfbnNzX2ZvcmNlX2luaXQoY29ubi0+ZGF0YSkpCisgICAgcmV0dXJuIENVUkxOVExNX0JBRDsKKyNlbmRpZgorCiAgIG50bG0gPSBwcm94eT8mY29ubi0+cHJveHludGxtOiZjb25uLT5udGxtOwogCiAgIC8qIHNraXAgaW5pdGlhbCB3aGl0ZXNwYWNlcyAqLwpAQCAtMzUxLDE2ICszNjYsMTQgQEAKICAgREVTX3NldF9vZGRfcGFyaXR5KCZrZXkpOwogICBERVNfc2V0X2tleSgma2V5LCBrcyk7CiB9Ci0jZWxpZiBkZWZpbmVkKFVTRV9HTlVUTFMpCisKKyNlbHNlIC8qIGRlZmluZWQoVVNFX1NTTEVBWSkgKi8KIAogLyoKLSAqIFR1cm5zIGEgNTYgYml0IGtleSBpbnRvIHRoZSA2NCBiaXQsIG9kZCBwYXJpdHkga2V5IGFuZCBzZXRzIHRoZSBrZXkuCisgKiBUdXJucyBhIDU2IGJpdCBrZXkgaW50byB0aGUgNjQgYml0LCBvZGQgcGFyaXR5IGtleS4gIFVzZWQgYnkgR251VExTIGFuZCBOU1MuCiAgKi8KLXN0YXRpYyB2b2lkIHNldHVwX2Rlc19rZXkoY29uc3QgdW5zaWduZWQgY2hhciAqa2V5XzU2LAotICAgICAgICAgICAgICAgICAgICAgICAgICBnY3J5X2NpcGhlcl9oZF90ICpkZXMpCitzdGF0aWMgdm9pZCBleHRlbmRfa2V5XzU2X3RvXzY0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleV81NiwgY2hhciAqa2V5KQogewotICBjaGFyIGtleVs4XTsKLQogICBrZXlbMF0gPSBrZXlfNTZbMF07CiAgIGtleVsxXSA9ICh1bnNpZ25lZCBjaGFyKSgoKGtleV81NlswXSA8PCA3KSAmIDB4RkYpIHwgKGtleV81NlsxXSA+PiAxKSk7CiAgIGtleVsyXSA9ICh1bnNpZ25lZCBjaGFyKSgoKGtleV81NlsxXSA8PCA2KSAmIDB4RkYpIHwgKGtleV81NlsyXSA+PiAyKSk7CkBAIC0zNjksMTAgKzM4Miw4NCBAQAogICBrZXlbNV0gPSAodW5zaWduZWQgY2hhcikoKChrZXlfNTZbNF0gPDwgMykgJiAweEZGKSB8IChrZXlfNTZbNV0gPj4gNSkpOwogICBrZXlbNl0gPSAodW5zaWduZWQgY2hhcikoKChrZXlfNTZbNV0gPDwgMikgJiAweEZGKSB8IChrZXlfNTZbNl0gPj4gNikpOwogICBrZXlbN10gPSAodW5zaWduZWQgY2hhcikgKChrZXlfNTZbNl0gPDwgMSkgJiAweEZGKTsKK30KIAorI2lmIGRlZmluZWQoVVNFX0dOVVRMUykKKworLyoKKyAqIFR1cm5zIGEgNTYgYml0IGtleSBpbnRvIHRoZSA2NCBiaXQsIG9kZCBwYXJpdHkga2V5IGFuZCBzZXRzIHRoZSBrZXkuCisgKi8KK3N0YXRpYyB2b2lkIHNldHVwX2Rlc19rZXkoY29uc3QgdW5zaWduZWQgY2hhciAqa2V5XzU2LAorICAgICAgICAgICAgICAgICAgICAgICAgICBnY3J5X2NpcGhlcl9oZF90ICpkZXMpCit7CisgIGNoYXIga2V5WzhdOworICBleHRlbmRfa2V5XzU2X3RvXzY0KGtleV81Niwga2V5KTsKICAgZ2NyeV9jaXBoZXJfc2V0a2V5KCpkZXMsIGtleSwgOCk7CiB9Ci0jZW5kaWYKKworI2VsaWYgZGVmaW5lZChVU0VfTlNTKQorCisvKgorICogRXhwYW5kcyBhIDU2IGJpdCBrZXkgS0VZXzU2IHRvIDY0IGJpdCBhbmQgZW5jcnlwdHMgNjQgYml0IG9mIGRhdGEsIHVzaW5nCisgKiB0aGUgZXhwYW5kZWQga2V5LiAgVGhlIGNhbGxlciBpcyByZXNwb25zaWJsZSBmb3IgZ2l2aW5nIDY0IGJpdCBvZiB2YWxpZAorICogZGF0YSBpcyBJTiBhbmQgKGF0IGxlYXN0KSA2NCBiaXQgbGFyZ2UgYnVmZmVyIGFzIE9VVC4KKyAqLworc3RhdGljIGJvb2wgZW5jcnlwdF9kZXMoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHVuc2lnbmVkIGNoYXIgKm91dCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleV81NikKK3sKKyAgY29uc3QgQ0tfTUVDSEFOSVNNX1RZUEUgbWVjaCA9IENLTV9ERVNfRUNCOyAvKiBERVMgY2lwaGVyIGluIEVDQiBtb2RlICovCisgIFBLMTFTbG90SW5mbyAqc2xvdCA9IE5VTEw7CisgIGNoYXIga2V5WzhdOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZXhwYW5kZWQgNjQgYml0IGtleSAqLworICBTRUNJdGVtIGtleV9pdGVtOworICBQSzExU3ltS2V5ICpzeW1rZXkgPSBOVUxMOworICBTRUNJdGVtICpwYXJhbSA9IE5VTEw7CisgIFBLMTFDb250ZXh0ICpjdHggPSBOVUxMOworICBpbnQgb3V0X2xlbjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG5vdCB1c2VkLCByZXF1aXJlZCBieSBOU1MgKi8KKyAgYm9vbCBydiA9IEZBTFNFOworCisgIC8qIHVzZSBpbnRlcm5hbCBzbG90IGZvciBERVMgZW5jcnlwdGlvbiAocmVxdWlyZXMgTlNTIHRvIGJlIGluaXRpYWxpemVkKSAqLworICBzbG90ID0gUEsxMV9HZXRJbnRlcm5hbEtleVNsb3QoKTsKKyAgaWYoIXNsb3QpCisgICAgcmV0dXJuIEZBTFNFOworCisgIC8qIGV4cGFuZCB0aGUgNTYgYml0IGtleSB0byA2NCBiaXQgYW5kIHdyYXAgYnkgTlNTICovCisgIGV4dGVuZF9rZXlfNTZfdG9fNjQoa2V5XzU2LCBrZXkpOworICBrZXlfaXRlbS5kYXRhID0gKHVuc2lnbmVkIGNoYXIgKilrZXk7CisgIGtleV9pdGVtLmxlbiA9IC8qIGhhcmQtd2lyZWQgKi8gODsKKyAgc3lta2V5ID0gUEsxMV9JbXBvcnRTeW1LZXkoc2xvdCwgbWVjaCwgUEsxMV9PcmlnaW5VbndyYXAsIENLQV9FTkNSWVBULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAma2V5X2l0ZW0sIE5VTEwpOworICBpZighc3lta2V5KQorICAgIGdvdG8gZmFpbDsKKworICAvKiBjcmVhdGUgREVTIGVuY3J5cHRpb24gY29udGV4dCAqLworICBwYXJhbSA9IFBLMTFfUGFyYW1Gcm9tSVYobWVjaCwgLyogbm8gSVYgaW4gRUNCIG1vZGUgKi8gTlVMTCk7CisgIGlmKCFwYXJhbSkKKyAgICBnb3RvIGZhaWw7CisgIGN0eCA9IFBLMTFfQ3JlYXRlQ29udGV4dEJ5U3ltS2V5KG1lY2gsIENLQV9FTkNSWVBULCBzeW1rZXksIHBhcmFtKTsKKyAgaWYoIWN0eCkKKyAgICBnb3RvIGZhaWw7CisKKyAgLyogcGVyZm9ybSB0aGUgZW5jcnlwdGlvbiAqLworICBpZihTRUNTdWNjZXNzID09IFBLMTFfQ2lwaGVyT3AoY3R4LCBvdXQsICZvdXRfbGVuLCAvKiBvdXRidWZsZW4gKi8gOCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBjaGFyICopaW4sIC8qIGluYnVmbGVuICovIDgpCisgICAgICAmJiBTRUNTdWNjZXNzID09IFBLMTFfRmluYWxpemUoY3R4KSkKKyAgICBydiA9IC8qIGFsbCBPSyAqLyBUUlVFOworCitmYWlsOgorICAvKiBjbGVhbnVwICovCisgIGlmKGN0eCkKKyAgICBQSzExX0Rlc3Ryb3lDb250ZXh0KGN0eCwgUFJfVFJVRSk7CisgIGlmKHN5bWtleSkKKyAgICBQSzExX0ZyZWVTeW1LZXkoc3lta2V5KTsKKyAgaWYocGFyYW0pCisgICAgU0VDSVRFTV9GcmVlSXRlbShwYXJhbSwgUFJfVFJVRSk7CisgIFBLMTFfRnJlZVNsb3Qoc2xvdCk7CisgIHJldHVybiBydjsKK30KKworI2VuZGlmIC8qIGRlZmluZWQoVVNFX05TUykgKi8KKworI2VuZGlmIC8qIGRlZmluZWQoVVNFX1NTTEVBWSkgKi8KIAogIC8qCiAgICogdGFrZXMgYSAyMSBieXRlIGFycmF5IGFuZCB0cmVhdHMgaXQgYXMgMyA1Ni1iaXQgREVTIGtleXMuIFRoZQpAQCAtNDE0LDYgKzUwMSwxMCBAQAogICBzZXR1cF9kZXNfa2V5KGtleXMrMTQsICZkZXMpOwogICBnY3J5X2NpcGhlcl9lbmNyeXB0KGRlcywgcmVzdWx0cysxNiwgOCwgcGxhaW50ZXh0LCA4KTsKICAgZ2NyeV9jaXBoZXJfY2xvc2UoZGVzKTsKKyNlbGlmIGRlZmluZWQoVVNFX05TUykKKyAgZW5jcnlwdF9kZXMocGxhaW50ZXh0LCByZXN1bHRzLCAgICBrZXlzKTsKKyAgZW5jcnlwdF9kZXMocGxhaW50ZXh0LCByZXN1bHRzKzgsICBrZXlzKzcpOworICBlbmNyeXB0X2RlcyhwbGFpbnRleHQsIHJlc3VsdHMrMTYsIGtleXMrMTQpOwogI2VuZGlmCiB9CiAKQEAgLTQ3MCwxMSArNTYxLDE0IEBACiAgICAgc2V0dXBfZGVzX2tleShwdys3LCAmZGVzKTsKICAgICBnY3J5X2NpcGhlcl9lbmNyeXB0KGRlcywgbG1idWZmZXIrOCwgOCwgbWFnaWMsIDgpOwogICAgIGdjcnlfY2lwaGVyX2Nsb3NlKGRlcyk7CisjZWxpZiBkZWZpbmVkKFVTRV9OU1MpCisgICAgZW5jcnlwdF9kZXMobWFnaWMsIGxtYnVmZmVyLCAgIHB3KTsKKyAgICBlbmNyeXB0X2RlcyhtYWdpYywgbG1idWZmZXIrOCwgcHcrNyk7CiAjZW5kaWYKIAogICAgIG1lbXNldChsbWJ1ZmZlciArIDE2LCAwLCAyMSAtIDE2KTsKICAgfQotICB9Cit9CiAKICNpZiBVU0VfTlRSRVNQT05TRVMKIHN0YXRpYyB2b2lkIGFzY2lpX3RvX3VuaWNvZGVfbGUodW5zaWduZWQgY2hhciAqZGVzdCwgY29uc3QgY2hhciAqc3JjLApAQCAtNTI1LDYgKzYxOSw4IEBACiAgICAgZ2NyeV9tZF93cml0ZShNRDRwdywgcHcsIDIqbGVuKTsKICAgICBtZW1jcHkgKG50YnVmZmVyLCBnY3J5X21kX3JlYWQgKE1ENHB3LCAwKSwgTUQ0X0RJR0VTVF9MRU5HVEgpOwogICAgIGdjcnlfbWRfY2xvc2UoTUQ0cHcpOworI2VsaWYgZGVmaW5lZChVU0VfTlNTKQorICAgIEN1cmxfbWQ0aXQobnRidWZmZXIsIHB3LCAyKmxlbik7CiAjZW5kaWYKIAogICAgIG1lbXNldChudGJ1ZmZlciArIDE2LCAwLCAyMSAtIDE2KTsKQEAgLTU5OSw2ICs2OTUsMTEgQEAKICAgREVCVUdBU1NFUlQoY29ubik7CiAgIERFQlVHQVNTRVJUKGNvbm4tPmRhdGEpOwogCisjaWZkZWYgVVNFX05TUworICBpZihDVVJMRV9PSyAhPSBDdXJsX25zc19mb3JjZV9pbml0KGNvbm4tPmRhdGEpKQorICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOworI2VuZGlmCisKICAgaWYocHJveHkpIHsKICAgICBhbGxvY3VzZXJwd2QgPSAmY29ubi0+YWxsb2NwdHIucHJveHl1c2VycHdkOwogICAgIHVzZXJwID0gY29ubi0+cHJveHl1c2VyOwpAQCAtODk0LDcgKzk5NSw3IEBACiAgICAgICB1c2VyID0gdXNlcnA7CiAgICAgdXNlcmxlbiA9IHN0cmxlbih1c2VyKTsKIAotICAgIGlmKGdldGhvc3RuYW1lKGhvc3QsIEhPU1ROQU1FX01BWCkpIHsKKyAgICBpZihDdXJsX2dldGhvc3RuYW1lKGhvc3QsIEhPU1ROQU1FX01BWCkpIHsKICAgICAgIGluZm9mKGNvbm4tPmRhdGEsICJnZXRob3N0bmFtZSgpIGZhaWxlZCwgY29udGludWluZyB3aXRob3V0ISIpOwogICAgICAgaG9zdGxlbiA9IDA7CiAgICAgfQpAQCAtOTI2LDYgKzEwMjcsMTEgQEAKICAgICAgIGdjcnlfbWRfaGRfdCBNRDVwdzsKICAgICAgIEN1cmxfZ3Rsc19zZWVkKGNvbm4tPmRhdGEpOyAvKiBJbml0aWF0ZSB0aGUgc2VlZCBpZiBub3QgYWxyZWFkeSBkb25lICovCiAgICAgICBnY3J5X3JhbmRvbWl6ZShlbnRyb3B5LCA4LCBHQ1JZX1NUUk9OR19SQU5ET00pOworI2VsaWYgZGVmaW5lZChVU0VfTlNTKQorICAgICAgUEsxMUNvbnRleHQgKk1ENXB3OworICAgICAgdW5zaWduZWQgaW50IG91dGxlbjsKKyAgICAgIEN1cmxfbnNzX3NlZWQoY29ubi0+ZGF0YSk7ICAvKiBJbml0aWF0ZSB0aGUgc2VlZCBpZiBub3QgYWxyZWFkeSBkb25lICovCisgICAgICBQSzExX0dlbmVyYXRlUmFuZG9tKGVudHJvcHksIDgpOwogI2VuZGlmCiAKICAgICAgIC8qIDggYnl0ZXMgcmFuZG9tIGRhdGEgYXMgY2hhbGxlbmdlIGluIGxtcmVzcCAqLwpAQCAtOTQ2LDYgKzEwNTIsMTEgQEAKICAgICAgIGdjcnlfbWRfd3JpdGUoTUQ1cHcsIHRtcCwgTUQ1X0RJR0VTVF9MRU5HVEgpOwogICAgICAgbWVtY3B5KG1kNXN1bSwgZ2NyeV9tZF9yZWFkIChNRDVwdywgMCksIE1ENV9ESUdFU1RfTEVOR1RIKTsKICAgICAgIGdjcnlfbWRfY2xvc2UoTUQ1cHcpOworI2VsaWYgZGVmaW5lZChVU0VfTlNTKQorICAgICAgTUQ1cHcgPSBQSzExX0NyZWF0ZURpZ2VzdENvbnRleHQoU0VDX09JRF9NRDUpOworICAgICAgUEsxMV9EaWdlc3RPcChNRDVwdywgdG1wLCAxNik7CisgICAgICBQSzExX0RpZ2VzdEZpbmFsKE1ENXB3LCBtZDVzdW0sICZvdXRsZW4sIE1ENV9ESUdFU1RfTEVOR1RIKTsKKyAgICAgIFBLMTFfRGVzdHJveUNvbnRleHQoTUQ1cHcsIFBSX1RSVUUpOwogI2VuZGlmCiAKICAgICAgIC8qIFdlIHNoYWxsIG9ubHkgdXNlIHRoZSBmaXJzdCA4IGJ5dGVzIG9mIG1kNXN1bSwKZGlmZiAtLWdpdCBhL2xpYi9pbWFwLmMgYi9saWIvaW1hcC5jCmluZGV4IGY3Yjg5NWQuLmNkYWRkMTcgMTAwNjQ0Ci0tLSBhL2xpYi9pbWFwLmMKKysrIGIvbGliL2ltYXAuYwpAQCAtNDM2LDEyICs0MzYsMTEgQEAKIAogICAgIGlmKCFmaWxlc2l6ZSkKICAgICAgIC8qIHRoZSBlbnRpcmUgZGF0YSBpcyBhbHJlYWR5IHRyYW5zZmVyZWQhICovCi0gICAgICByZXN1bHQ9Q3VybF9zZXR1cF90cmFuc2Zlcihjb25uLCAtMSwgLTEsIEZBTFNFLCBOVUxMLCAtMSwgTlVMTCk7CisgICAgICBDdXJsX3NldHVwX3RyYW5zZmVyKGNvbm4sIC0xLCAtMSwgRkFMU0UsIE5VTEwsIC0xLCBOVUxMKTsKICAgICBlbHNlCiAgICAgICAvKiBJTUFQIGRvd25sb2FkICovCi0gICAgICByZXN1bHQ9Q3VybF9zZXR1cF90cmFuc2Zlcihjb25uLCBGSVJTVFNPQ0tFVCwgZmlsZXNpemUsIEZBTFNFLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1hcC0+Ynl0ZWNvdW50cCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xLCBOVUxMKTsgLyogbm8gdXBsb2FkIGhlcmUgKi8KKyAgICAgIEN1cmxfc2V0dXBfdHJhbnNmZXIoY29ubiwgRklSU1RTT0NLRVQsIGZpbGVzaXplLCBGQUxTRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaW1hcC0+Ynl0ZWNvdW50cCwgLTEsIE5VTEwpOyAvKiBubyB1cGxvYWQgaGVyZSAqLwogCiAgICAgZGF0YS0+cmVxLm1heGRvd25sb2FkID0gZmlsZXNpemU7CiAgIH0KQEAgLTkyNCwxNSArOTIzLDE0IEBACiBzdGF0aWMgQ1VSTGNvZGUgaW1hcF9kb3BoYXNlX2RvbmUoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgY29ubmVjdGVkKQogewotICBDVVJMY29kZSByZXN1bHQgPSBDVVJMRV9PSzsKICAgc3RydWN0IEZUUCAqaW1hcCA9IGNvbm4tPmRhdGEtPnN0YXRlLnByb3RvLmltYXA7CiAgICh2b2lkKWNvbm5lY3RlZDsKIAogICBpZihpbWFwLT50cmFuc2ZlciAhPSBGVFBUUkFOU0ZFUl9CT0RZKQogICAgIC8qIG5vIGRhdGEgdG8gdHJhbnNmZXIgKi8KLSAgICByZXN1bHQ9Q3VybF9zZXR1cF90cmFuc2Zlcihjb25uLCAtMSwgLTEsIEZBTFNFLCBOVUxMLCAtMSwgTlVMTCk7CisgICAgQ3VybF9zZXR1cF90cmFuc2Zlcihjb25uLCAtMSwgLTEsIEZBTFNFLCBOVUxMLCAtMSwgTlVMTCk7CiAKLSAgcmV0dXJuIHJlc3VsdDsKKyAgcmV0dXJuIENVUkxFX09LOwogfQogCiAvKiBjYWxsZWQgZnJvbSBtdWx0aS5jIHdoaWxlIERPaW5nICovCmRpZmYgLS1naXQgYS9saWIvaW5ldF9wdG9uLmMgYi9saWIvaW5ldF9wdG9uLmMKaW5kZXggOTE4OWNlNi4uZGI0ZjM5MyAxMDA2NDQKLS0tIGEvbGliL2luZXRfcHRvbi5jCisrKyBiL2xpYi9pbmV0X3B0b24uYwpAQCAtMTU5LDcgKzE1OSw3IEBACiAgIHVuc2lnbmVkIGNoYXIgdG1wW0lONkFERFJTWl0sICp0cCwgKmVuZHAsICpjb2xvbnA7CiAgIGNvbnN0IGNoYXIgKnhkaWdpdHMsICpjdXJ0b2s7CiAgIGludCBjaCwgc2F3X3hkaWdpdDsKLSAgdW5zaWduZWQgaW50IHZhbDsKKyAgc2l6ZV90IHZhbDsKIAogICBtZW1zZXQoKHRwID0gdG1wKSwgMCwgSU42QUREUlNaKTsKICAgZW5kcCA9IHRwICsgSU42QUREUlNaOwpAQCAtMjE4LDggKzIxOCw4IEBACiAgICAgICogU2luY2Ugc29tZSBtZW1tb3ZlKCkncyBlcnJvbmVvdXNseSBmYWlsIHRvIGhhbmRsZQogICAgICAqIG92ZXJsYXBwaW5nIHJlZ2lvbnMsIHdlJ2xsIGRvIHRoZSBzaGlmdCBieSBoYW5kLgogICAgICAqLwotICAgIGNvbnN0IGxvbmcgbiA9IHRwIC0gY29sb25wOwotICAgIGxvbmcgaTsKKyAgICBjb25zdCBzaXplX3QgbiA9IHRwIC0gY29sb25wOworICAgIHNpemVfdCBpOwogCiAgICAgaWYodHAgPT0gZW5kcCkKICAgICAgIHJldHVybiAoMCk7CmRpZmYgLS1naXQgYS9saWIva3JiNC5oIGIvbGliL2tyYjQuaAppbmRleCA4MTk5OGI1Li41ZGExZGM2IDEwMDY0NAotLS0gYS9saWIva3JiNC5oCisrKyBiL2xpYi9rcmI0LmgKQEAgLTcsNyArNyw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAwNiwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKQEAgLTQ3LDI0ICs0NywyMCBAQAogI2VuZGlmCiAKIENVUkxjb2RlIEN1cmxfa3JiX2thdXRoKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubik7Ci1pbnQgQ3VybF9zZWNfZmZsdXNoX2ZkKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgaW50IGZkKTsKIGludCBDdXJsX3NlY19mcHJpbnRmIChzdHJ1Y3QgY29ubmVjdGRhdGEgKiwgRklMRSAqLCBjb25zdCBjaGFyICosIC4uLik7CiBpbnQgQ3VybF9zZWNfZ2V0YyAoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBGSUxFICopOwogaW50IEN1cmxfc2VjX3B1dGMgKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgaW50LCBGSUxFICopOwotaW50IEN1cmxfc2VjX3JlYWQgKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgaW50LCB2b2lkICosIGludCk7CiBpbnQgQ3VybF9zZWNfcmVhZF9tc2cgKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgY2hhciAqLCBpbnQpOwogCiBpbnQgQ3VybF9zZWNfdmZwcmludGYoc3RydWN0IGNvbm5lY3RkYXRhICosIEZJTEUgKiwgY29uc3QgY2hhciAqLCB2YV9saXN0KTsKIGludCBDdXJsX3NlY19mcHJpbnRmMihzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIEZJTEUgKmYsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsKIGludCBDdXJsX3NlY192ZnByaW50ZjIoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBGSUxFICosIGNvbnN0IGNoYXIgKiwgdmFfbGlzdCk7Ci1zc2l6ZV90IEN1cmxfc2VjX3NlbmQoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBpbnQsIGNvbnN0IGNoYXIgKiwgaW50KTsKLWludCBDdXJsX3NlY193cml0ZShzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGludCwgY29uc3QgY2hhciAqLCBpbnQpOwogCiB2b2lkIEN1cmxfc2VjX2VuZCAoc3RydWN0IGNvbm5lY3RkYXRhICopOwotaW50IEN1cmxfc2VjX2xvZ2luIChzdHJ1Y3QgY29ubmVjdGRhdGEgKik7CitDVVJMY29kZSBDdXJsX3NlY19sb2dpbiAoc3RydWN0IGNvbm5lY3RkYXRhICopOwogdm9pZCBDdXJsX3NlY19wcm90IChpbnQsIGNoYXIgKiopOwogaW50IEN1cmxfc2VjX3JlcXVlc3RfcHJvdCAoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBjb25zdCBjaGFyICpsZXZlbCk7Ci12b2lkIEN1cmxfc2VjX3NldF9wcm90ZWN0aW9uX2xldmVsKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubik7CitpbnQgQ3VybF9zZWNfc2V0X3Byb3RlY3Rpb25fbGV2ZWwoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uKTsKIHZvaWQgQ3VybF9zZWNfc3RhdHVzICh2b2lkKTsKIAogZW51bSBwcm90ZWN0aW9uX2xldmVsIEN1cmxfc2V0X2NvbW1hbmRfcHJvdChzdHJ1Y3QgY29ubmVjdGRhdGEgKiwKZGlmZiAtLWdpdCBhL2xpYi9rcmI1LmMgYi9saWIva3JiNS5jCmluZGV4IDM2YWZjM2MuLjI1MzAzOTUgMTAwNjQ0Ci0tLSBhL2xpYi9rcmI1LmMKKysrIGIvbGliL2tyYjUuYwpAQCAtMSw2ICsxLDYgQEAKIC8qIEdTU0FQSS9rcmI1IHN1cHBvcnQgZm9yIEZUUCAtIGxvb3NlbHkgYmFzZWQgb24gb2xkIGtyYjQuYwogICoKLSAqIENvcHlyaWdodCAoYykgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSBLdW5nbGlnYSBUZWtuaXNrYSBI9mdza29sYW4KKyAqIENvcHlyaWdodCAoYykgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAxMCBLdW5nbGlnYSBUZWtuaXNrYSBI9mdza29sYW4KICAqIChSb3lhbCBJbnN0aXR1dGUgb2YgVGVjaG5vbG9neSwgU3RvY2tob2xtLCBTd2VkZW4pLgogICogQ29weXJpZ2h0IChjKSAyMDA0IC0gMjAwOSBEYW5pZWwgU3RlbmJlcmcKICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCkBAIC03Niw5ICs3NiwxOCBAQAogI2RlZmluZSBSRU1PVEVfQUREUiBjb25uLT5pcF9hZGRyLT5haV9hZGRyCiAKIHN0YXRpYyBpbnQKK2tyYjVfaW5pdCh2b2lkICphcHBfZGF0YSkKK3sKKyAgZ3NzX2N0eF9pZF90ICpjb250ZXh0ID0gYXBwX2RhdGE7CisgIC8qIE1ha2Ugc3VyZSBvdXIgY29udGV4dCBpcyBpbml0aWFsaXplZCBmb3Iga3JiNV9lbmQuICovCisgICpjb250ZXh0ID0gR1NTX0NfTk9fQ09OVEVYVDsKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKIGtyYjVfY2hlY2tfcHJvdCh2b2lkICphcHBfZGF0YSwgaW50IGxldmVsKQogewotICBhcHBfZGF0YSA9IE5VTEw7IC8qIHByZXZlbnQgY29tcGlsZXIgd2FybmluZyAqLworICAodm9pZClhcHBfZGF0YTsgLyogdW51c2VkICovCiAgIGlmKGxldmVsID09IHByb3RfY29uZmlkZW50aWFsKQogICAgIHJldHVybiAtMTsKICAgcmV0dXJuIDA7CkBAIC0xNjEsMTUgKzE3MCwxNSBAQAogc3RhdGljIGludAoga3JiNV9hdXRoKHZvaWQgKmFwcF9kYXRhLCBzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pCiB7Ci0gIGludCByZXQ7CisgIGludCByZXQgPSBBVVRIX09LOwogICBjaGFyICpwOwotICBjb25zdCBjaGFyICpob3N0ID0gY29ubi0+ZG5zX2VudHJ5LT5hZGRyLT5haV9jYW5vbm5hbWU7CisgIGNvbnN0IGNoYXIgKmhvc3QgPSBjb25uLT5ob3N0Lm5hbWU7CiAgIHNzaXplX3QgbnJlYWQ7CiAgIGN1cmxfc29ja2xlbl90IGwgPSBzaXplb2YoY29ubi0+bG9jYWxfYWRkcik7CiAgIHN0cnVjdCBTZXNzaW9uSGFuZGxlICpkYXRhID0gY29ubi0+ZGF0YTsKICAgQ1VSTGNvZGUgcmVzdWx0OwogICBjb25zdCBjaGFyICpzZXJ2aWNlID0gImZ0cCIsICpzcnZfaG9zdCA9ICJob3N0IjsKLSAgZ3NzX2J1ZmZlcl9kZXNjIGdzc2J1ZiwgX2dzc3Jlc3AsICpnc3NyZXNwOworICBnc3NfYnVmZmVyX2Rlc2MgaW5wdXRfYnVmZmVyLCBvdXRwdXRfYnVmZmVyLCBfZ3NzcmVzcCwgKmdzc3Jlc3A7CiAgIE9NX3VpbnQzMiBtYWosIG1pbjsKICAgZ3NzX25hbWVfdCBnc3NuYW1lOwogICBnc3NfY3R4X2lkX3QgKmNvbnRleHQgPSBhcHBfZGF0YTsKQEAgLTIwNSwyOCArMjE0LDMxIEBACiAgICAgICAgIHJldHVybiAtMTsKICAgICB9CiAKLSAgICBnc3NidWYudmFsdWUgPSBkYXRhLT5zdGF0ZS5idWZmZXI7Ci0gICAgZ3NzYnVmLmxlbmd0aCA9IHNucHJpbnRmKGdzc2J1Zi52YWx1ZSwgQlVGU0laRSwgIiVzQCVzIiwgc2VydmljZSwgaG9zdCk7Ci0gICAgbWFqID0gZ3NzX2ltcG9ydF9uYW1lKCZtaW4sICZnc3NidWYsIEdTU19DX05UX0hPU1RCQVNFRF9TRVJWSUNFLCAmZ3NzbmFtZSk7CisgICAgaW5wdXRfYnVmZmVyLnZhbHVlID0gZGF0YS0+c3RhdGUuYnVmZmVyOworICAgIGlucHV0X2J1ZmZlci5sZW5ndGggPSBzbnByaW50ZihpbnB1dF9idWZmZXIudmFsdWUsIEJVRlNJWkUsICIlc0AlcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZpY2UsIGhvc3QpOworICAgIG1haiA9IGdzc19pbXBvcnRfbmFtZSgmbWluLCAmaW5wdXRfYnVmZmVyLCBHU1NfQ19OVF9IT1NUQkFTRURfU0VSVklDRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJmdzc25hbWUpOwogICAgIGlmKG1haiAhPSBHU1NfU19DT01QTEVURSkgewogICAgICAgZ3NzX3JlbGVhc2VfbmFtZSgmbWluLCAmZ3NzbmFtZSk7CiAgICAgICBpZihzZXJ2aWNlID09IHNydl9ob3N0KSB7Ci0gICAgICAgIEN1cmxfZmFpbGYoZGF0YSwgIkVycm9yIGltcG9ydGluZyBzZXJ2aWNlIG5hbWUgJXMiLCBnc3NidWYudmFsdWUpOworICAgICAgICBDdXJsX2ZhaWxmKGRhdGEsICJFcnJvciBpbXBvcnRpbmcgc2VydmljZSBuYW1lICVzIiwgaW5wdXRfYnVmZmVyLnZhbHVlKTsKICAgICAgICAgcmV0dXJuIEFVVEhfRVJST1I7CiAgICAgICB9CiAgICAgICBzZXJ2aWNlID0gc3J2X2hvc3Q7CiAgICAgICBjb250aW51ZTsKICAgICB9Ci0gICAgewotICAgICAgZ3NzX09JRCB0OwotICAgICAgZ3NzX2Rpc3BsYXlfbmFtZSgmbWluLCBnc3NuYW1lLCAmZ3NzYnVmLCAmdCk7Ci0gICAgICBDdXJsX2luZm9mKGRhdGEsICJUcnlpbmcgYWdhaW5zdCAlc1xuIiwgZ3NzYnVmLnZhbHVlKTsKLSAgICAgIGdzc19yZWxlYXNlX2J1ZmZlcigmbWluLCAmZ3NzYnVmKTsKLSAgICB9CisgICAgLyogV2UgcGFzcyBOVUxMIGFzIHxvdXRwdXRfbmFtZV90eXBlfCB0byBhdm9pZCBhIGxlYWsuICovCisgICAgZ3NzX2Rpc3BsYXlfbmFtZSgmbWluLCBnc3NuYW1lLCAmb3V0cHV0X2J1ZmZlciwgTlVMTCk7CisgICAgQ3VybF9pbmZvZihkYXRhLCAiVHJ5aW5nIGFnYWluc3QgJXNcbiIsIG91dHB1dF9idWZmZXIudmFsdWUpOwogICAgIGdzc3Jlc3AgPSBHU1NfQ19OT19CVUZGRVI7CiAgICAgKmNvbnRleHQgPSBHU1NfQ19OT19DT05URVhUOwogCiAgICAgZG8geworICAgICAgLyogUmVsZWFzZSB0aGUgYnVmZmVyIGF0IGVhY2ggaXRlcmF0aW9uIHRvIGF2b2lkIGxlYWtpbmc6IHRoZSBmaXJzdCB0aW1lCisgICAgICAgICB3ZSBhcmUgcmVsZWFzaW5nIHRoZSBtZW1vcnkgZnJvbSBnc3NfZGlzcGxheV9uYW1lLiBUaGUgbGFzdCBpdGVtIGlzCisgICAgICAgICB0YWtlbiBjYXJlIGJ5IGEgZmluYWwgZ3NzX3JlbGVhc2VfYnVmZmVyLiAqLworICAgICAgZ3NzX3JlbGVhc2VfYnVmZmVyKCZtaW4sICZvdXRwdXRfYnVmZmVyKTsKICAgICAgIHJldCA9IEFVVEhfT0s7CiAgICAgICBtYWogPSBnc3NfaW5pdF9zZWNfY29udGV4dCgmbWluLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1NTX0NfTk9fQ1JFREVOVElBTCwKQEAgLTIzOCw3ICsyNTAsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNoYW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnc3NyZXNwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZnc3NidWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmb3V0cHV0X2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKIApAQCAtMjUzLDkgKzI2NSw5IEBACiAgICAgICAgIGJyZWFrOwogICAgICAgfQogCi0gICAgICBpZihnc3NidWYubGVuZ3RoICE9IDApIHsKLSAgICAgICAgaWYoQ3VybF9iYXNlNjRfZW5jb2RlKGRhdGEsIChjaGFyICopZ3NzYnVmLnZhbHVlLCBnc3NidWYubGVuZ3RoLCAmcCkKLSAgICAgICAgICAgPCAxKSB7CisgICAgICBpZihvdXRwdXRfYnVmZmVyLmxlbmd0aCAhPSAwKSB7CisgICAgICAgIGlmKEN1cmxfYmFzZTY0X2VuY29kZShkYXRhLCAoY2hhciAqKW91dHB1dF9idWZmZXIudmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRfYnVmZmVyLmxlbmd0aCwgJnApIDwgMSkgewogICAgICAgICAgIEN1cmxfaW5mb2YoZGF0YSwgIk91dCBvZiBtZW1vcnkgYmFzZTY0LWVuY29kaW5nIik7CiAgICAgICAgICAgcmV0ID0gQVVUSF9DT05USU5VRTsKICAgICAgICAgICBicmVhazsKQEAgLTI5OCw2ICszMTAsNyBAQAogICAgIH0gd2hpbGUobWFqID09IEdTU19TX0NPTlRJTlVFX05FRURFRCk7CiAKICAgICBnc3NfcmVsZWFzZV9uYW1lKCZtaW4sICZnc3NuYW1lKTsKKyAgICBnc3NfcmVsZWFzZV9idWZmZXIoJm1pbiwgJm91dHB1dF9idWZmZXIpOwogCiAgICAgaWYoZ3NzcmVzcCkKICAgICAgIGZyZWUoX2dzc3Jlc3AudmFsdWUpOwpAQCAtMzA3LDE0ICszMjAsMjUgQEAKIAogICAgIHNlcnZpY2UgPSBzcnZfaG9zdDsKICAgfQorICByZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBrcmI1X2VuZCh2b2lkICphcHBfZGF0YSkKK3sKKyAgICBPTV91aW50MzIgbWFqLCBtaW47CisgICAgZ3NzX2N0eF9pZF90ICpjb250ZXh0ID0gYXBwX2RhdGE7CisgICAgaWYgKCpjb250ZXh0ICE9IEdTU19DX05PX0NPTlRFWFQpIHsKKyAgICAgIG1haiA9IGdzc19kZWxldGVfc2VjX2NvbnRleHQoJm1pbiwgY29udGV4dCwgR1NTX0NfTk9fQlVGRkVSKTsKKyAgICAgIERFQlVHQVNTRVJUKG1haiA9PSBHU1NfU19DT01QTEVURSk7CisgICAgfQogfQogCiBzdHJ1Y3QgQ3VybF9zZWNfY2xpZW50X21lY2ggQ3VybF9rcmI1X2NsaWVudF9tZWNoID0gewogICAgICJHU1NBUEkiLAogICAgIHNpemVvZihnc3NfY3R4X2lkX3QpLAotICAgIE5VTEwsIC8qIGluaXQgKi8KKyAgICBrcmI1X2luaXQsCiAgICAga3JiNV9hdXRoLAotICAgIE5VTEwsIC8qIGVuZCAqLworICAgIGtyYjVfZW5kLAogICAgIGtyYjVfY2hlY2tfcHJvdCwKICAgICBrcmI1X292ZXJoZWFkLAogICAgIGtyYjVfZW5jb2RlLApkaWZmIC0tZ2l0IGEvbGliL2xkYXAuYyBiL2xpYi9sZGFwLmMKaW5kZXggMDdlYzViMC4uZDY1NTZjOSAxMDA2NDQKLS0tIGEvbGliL2xkYXAuYworKysgYi9saWIvbGRhcC5jCkBAIC01LDcgKzUsNyBAQAogICogICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAqICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKLSAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMDksIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDEwLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCkBAIC0yMiw3ICsyMiwxOSBAQAogCiAjaW5jbHVkZSAic2V0dXAuaCIKIAotI2lmbmRlZiBDVVJMX0RJU0FCTEVfTERBUAorI2lmICFkZWZpbmVkKENVUkxfRElTQUJMRV9MREFQKSAmJiAhZGVmaW5lZChVU0VfT1BFTkxEQVApCisKKy8qCisgKiBOb3RpY2UgdGhhdCBVU0VfT1BFTkxEQVAgaXMgb25seSBhIHNvdXJjZSBjb2RlIHNlbGVjdGlvbiBzd2l0Y2guIFdoZW4KKyAqIGxpYmN1cmwgaXMgYnVpbHQgd2l0aCBVU0VfT1BFTkxEQVAgZGVmaW5lZCB0aGUgbGliY3VybCBzb3VyY2UgY29kZSB0aGF0CisgKiBnZXRzIGNvbXBpbGVkIGlzIHRoZSBjb2RlIGZyb20gb3BlbmxkYXAuYywgb3RoZXJ3aXNlIHRoZSBjb2RlIHRoYXQgZ2V0cworICogY29tcGlsZWQgaXMgdGhlIGNvZGUgZnJvbSBsZGFwLmMuCisgKgorICogV2hlbiBVU0VfT1BFTkxEQVAgaXMgZGVmaW5lZCBhIHJlY2VudCB2ZXJzaW9uIG9mIHRoZSBPcGVuTERBUCBsaWJyYXJ5CisgKiBtaWdodCBiZSByZXF1aXJlZCBmb3IgY29tcGlsYXRpb24gYW5kIHJ1bnRpbWUuIEluIG9yZGVyIHRvIHVzZSBhbmNpZW50CisgKiBPcGVuTERBUCBsaWJyYXJ5IHZlcnNpb25zLCBVU0VfT1BFTkxEQVAgc2hhbGwgbm90IGJlIGRlZmluZWQuCisgKi8KKwogLyogLS0gV0lOMzIgYXBwcm92ZWQgLS0gKi8KICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPHN0cmluZy5oPgpAQCAtMzEsMTUgKzQzLDcgQEAKICNpbmNsdWRlIDxjdHlwZS5oPgogI2luY2x1ZGUgPGVycm5vLmg+CiAKLSNpZmRlZiBDVVJMX0xEQVBfSFlCUklEICAgICAgICAgLyogSWYgVyQgZGVmaW5pdGlvbnMgYXJlIG5lZWRlZC4gKi8KLSMgaW5jbHVkZSA8d2luZG93cy5oPgotICAvKiBSZW1lbWJlciB3ZSBhcmUgTk9UIGluIGEgVyQgY29tcGlsZXIhICovCi0jIHVuZGVmIFdJTjMyCi0jIHVuZGVmIF9XSU4zMgotIyB1bmRlZiBfX1dJTjMyX18KLSNlbmRpZgotCi0jaWZkZWYgQ1VSTF9MREFQX1dJTiAgICAgICAgICAgIC8qIFVzZSBXJCBMREFQIGltcGxlbWVudGF0aW9uLiAqLworI2lmZGVmIENVUkxfTERBUF9XSU4gICAgICAgICAgICAvKiBVc2UgV2luZG93cyBMREFQIGltcGxlbWVudGF0aW9uLiAqLwogIyBpbmNsdWRlIDx3aW5sZGFwLmg+CiAjIGlmbmRlZiBMREFQX1ZFTkRPUl9OQU1FCiAjICBlcnJvciBZb3VyIFBsYXRmb3JtIFNESyBpcyBOT1Qgc3VmZmljaWVudCBmb3IgTERBUCBzdXBwb3J0ISBVcGRhdGUgeW91ciBQbGF0Zm9ybSBTREssIG9yIGRpc2FibGUgTERBUCBzdXBwb3J0IQpAQCAtNDcsMTQgKzUxLDE0IEBACiAjICBpbmNsdWRlIDx3aW5iZXIuaD4KICMgZW5kaWYKICNlbHNlCi0jZGVmaW5lIExEQVBfREVQUkVDQVRFRCAxICAgICAgIC8qIEJlIHN1cmUgbGRhcF9pbml0KCkgaXMgZGVmaW5lZC4gKi8KLSNpZmRlZiBIQVZFX0xCRVJfSAotIyBpbmNsdWRlIDxsYmVyLmg+Ci0jZW5kaWYKKyMgZGVmaW5lIExEQVBfREVQUkVDQVRFRCAxICAgICAgLyogQmUgc3VyZSBsZGFwX2luaXQoKSBpcyBkZWZpbmVkLiAqLworIyBpZmRlZiBIQVZFX0xCRVJfSAorIyAgaW5jbHVkZSA8bGJlci5oPgorIyBlbmRpZgogIyBpbmNsdWRlIDxsZGFwLmg+Ci0jaWYgKGRlZmluZWQoSEFWRV9MREFQX1NTTCkgJiYgZGVmaW5lZChIQVZFX0xEQVBfU1NMX0gpKQotIyBpbmNsdWRlIDxsZGFwX3NzbC5oPgotI2VuZGlmIC8qIEhBVkVfTERBUF9TU0wgJiYgSEFWRV9MREFQX1NTTF9IICovCisjIGlmIChkZWZpbmVkKEhBVkVfTERBUF9TU0wpICYmIGRlZmluZWQoSEFWRV9MREFQX1NTTF9IKSkKKyMgIGluY2x1ZGUgPGxkYXBfc3NsLmg+CisjIGVuZGlmIC8qIEhBVkVfTERBUF9TU0wgJiYgSEFWRV9MREFQX1NTTF9IICovCiAjZW5kaWYKIAogI2lmZGVmIEhBVkVfVU5JU1REX0gKQEAgLTcxNSw0ICs3MTksNCBAQAogICBmcmVlIChsdWRwKTsKIH0KICNlbmRpZiAgLyogIUhBVkVfTERBUF9VUkxfUEFSU0UgKi8KLSNlbmRpZiAgLyogQ1VSTF9ESVNBQkxFX0xEQVAgKi8KKyNlbmRpZiAgLyogIUNVUkxfRElTQUJMRV9MREFQICYmICFVU0VfT1BFTkxEQVAgKi8KZGlmZiAtLWdpdCBhL2xpYi9saWJjdXJsLmltcCBiL2xpYi9saWJjdXJsLmltcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NDk0M2FmYQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9saWJjdXJsLmltcApAQCAtMCwwICsxLDUxIEBACisjCisjIERlZmluaXRpb24gZmlsZSBmb3IgdGhlIE5MTSB2ZXJzaW9uIG9mIHRoZSBMSUJDVVJMIGxpYnJhcnkgZnJvbSBjdXJsCisjCisjCShMSUJDVVJMKQorCWN1cmxfZWFzeV9jbGVhbnVwLAorCWN1cmxfZWFzeV9lc2NhcGUsCisJY3VybF9lYXN5X3VuZXNjYXBlLAorCWN1cmxfZWFzeV9nZXRpbmZvLAorCWN1cmxfZWFzeV9pbml0LAorCWN1cmxfZWFzeV9wYXVzZSwKKwljdXJsX2Vhc3lfcGVyZm9ybSwKKwljdXJsX2Vhc3lfc2V0b3B0LAorCWN1cmxfZXNjYXBlLAorCWN1cmxfdW5lc2NhcGUsCisJY3VybF9mb3JtZnJlZSwKKwljdXJsX2dldGRhdGUsCisJY3VybF9nZXRlbnYsCisJY3VybF9nbG9iYWxfY2xlYW51cCwKKwljdXJsX2dsb2JhbF9pbml0LAorCWN1cmxfc2xpc3RfYXBwZW5kLAorCWN1cmxfc2xpc3RfZnJlZV9hbGwsCisJY3VybF92ZXJzaW9uLAorCWN1cmxfbWFwcmludGYsCisJY3VybF9tZnByaW50ZiwKKwljdXJsX21wcmludGYsCisJY3VybF9tc3ByaW50ZiwKKwljdXJsX21zbnByaW50ZiwKKwljdXJsX212ZnByaW50ZiwKKwljdXJsX212c25wcmludGYsCisJY3VybF9zdHJlcXVhbCwKKwljdXJsX3N0cm5lcXVhbCwKKwljdXJsX2Vhc3lfZHVwaGFuZGxlLAorCWN1cmxfZm9ybWFkZCwKKwljdXJsX211bHRpX2luaXQsCisJY3VybF9tdWx0aV9hZGRfaGFuZGxlLAorCWN1cmxfbXVsdGlfcmVtb3ZlX2hhbmRsZSwKKwljdXJsX211bHRpX2Zkc2V0LAorCWN1cmxfbXVsdGlfcGVyZm9ybSwKKwljdXJsX211bHRpX2NsZWFudXAsCisJY3VybF9tdWx0aV9pbmZvX3JlYWQsCisJY3VybF9mcmVlLAorCWN1cmxfdmVyc2lvbl9pbmZvLAorCWN1cmxfc2hhcmVfaW5pdCwKKwljdXJsX3NoYXJlX3NldG9wdCwKKwljdXJsX3NoYXJlX2NsZWFudXAsCisJY3VybF9nbG9iYWxfaW5pdF9tZW0sCisJY3VybF9lYXN5X3N0cmVycm9yLAorCWN1cmxfbXVsdGlfc3RyZXJyb3IsCisJY3VybF9zaGFyZV9zdHJlcnJvciwKKwljdXJsX2Vhc3lfcmVzZXQKKwpkaWZmIC0tZ2l0IGEvbGliL2xpYmN1cmwucGxpc3QgYi9saWIvbGliY3VybC5wbGlzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZWE2MDZmCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2xpYmN1cmwucGxpc3QKQEAgLTAsMCArMSwzNSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhRE9DVFlQRSBwbGlzdCBTWVNURU0gImZpbGU6Ly9sb2NhbGhvc3QvU3lzdGVtL0xpYnJhcnkvRFREcy9Qcm9wZXJ0eUxpc3QuZHRkIj4KKzxwbGlzdCB2ZXJzaW9uPSIwLjkiPgorPGRpY3Q+CisJPGtleT5DRkJ1bmRsZUluZm9EaWN0aW9uYXJ5VmVyc2lvbjwva2V5PgorCTxzdHJpbmc+Ni4wPC9zdHJpbmc+CQorCQorCTxrZXk+Q0ZCdW5kbGVEZXZlbG9wbWVudFJlZ2lvbjwva2V5PgorCTxzdHJpbmc+RW5nbGlzaDwvc3RyaW5nPgorCQorCTxrZXk+Q0ZCdW5kbGVFeGVjdXRhYmxlPC9rZXk+CisJPHN0cmluZz5jdXJsPC9zdHJpbmc+CisJCisJPGtleT5DRkJ1bmRsZUlkZW50aWZpZXI8L2tleT4KKwk8c3RyaW5nPmNvbS5saWJjdXJsLmxpYmN1cmw8L3N0cmluZz4KKwkKKwk8a2V5PkNGQnVuZGxlVmVyc2lvbjwva2V5PgorCTxzdHJpbmc+Ny4yMS4yPC9zdHJpbmc+CisKKwk8a2V5PkNGQnVuZGxlTmFtZTwva2V5PgorCTxzdHJpbmc+bGliY3VybDwvc3RyaW5nPgorCisJPGtleT5DRkJ1bmRsZVBhY2thZ2VUeXBlPC9rZXk+CisJPHN0cmluZz5GTVdLPC9zdHJpbmc+CQorCSAKKwk8a2V5PkNGQnVuZGxlU2lnbmF0dXJlPC9rZXk+CisJPHN0cmluZz4/Pz8/PC9zdHJpbmc+CQorCQorCTxrZXk+Q0ZCdW5kbGVTaG9ydFZlcnNpb25TdHJpbmc8L2tleT4KKwk8c3RyaW5nPmxpYmN1cmwgNy4yMS4yPC9zdHJpbmc+CisJCisJPGtleT5DRkJ1bmRsZUdldEluZm9TdHJpbmc8L2tleT4KKwk8c3RyaW5nPmxpYmN1cmwucGxpc3QgNy4yMS4yPC9zdHJpbmc+Cis8L2RpY3Q+Cis8L3BsaXN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2xpYi9saWJjdXJsLnJjIGIvbGliL2xpYmN1cmwucmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDdiOTQ0YQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9saWJjdXJsLnJjCkBAIC0wLDAgKzEsNjMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMDksIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisgKgorICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2luY2x1ZGUgPHdpbnZlci5oPgorI2luY2x1ZGUgIi4uL2luY2x1ZGUvY3VybC9jdXJsdmVyLmgiCisKK0xBTkdVQUdFICAweDA5LDB4MDEKKworI2RlZmluZSBSQ19WRVJTSU9OICBMSUJDVVJMX1ZFUlNJT05fTUFKT1IsIExJQkNVUkxfVkVSU0lPTl9NSU5PUiwgTElCQ1VSTF9WRVJTSU9OX1BBVENILCAwCisKK1ZTX1ZFUlNJT05fSU5GTyBWRVJTSU9OSU5GTworICBGSUxFVkVSU0lPTiAgICAgUkNfVkVSU0lPTgorICBQUk9EVUNUVkVSU0lPTiAgUkNfVkVSU0lPTgorICBGSUxFRkxBR1NNQVNLICAgMHgzZkwKKyNpZiBkZWZpbmVkKERFQlVHQlVJTEQpIHx8IGRlZmluZWQoX0RFQlVHKQorICBGSUxFRkxBR1MgMQorI2Vsc2UKKyAgRklMRUZMQUdTIDAKKyNlbmRpZgorICBGSUxFT1MgICAgICBWT1NfX1dJTkRPV1MzMgorICBGSUxFVFlQRSAgICBWRlRfRExMCisgIEZJTEVTVUJUWVBFIDB4MEwKKworQkVHSU4KKyAgQkxPQ0sgIlN0cmluZ0ZpbGVJbmZvIgorICBCRUdJTgorICAgIEJMT0NLICIwNDA5MDRiMCIKKyAgICBCRUdJTgorICAgICAgVkFMVUUgIkNvbXBhbnlOYW1lIiwgICAgICAiVGhlIGNVUkwgbGlicmFyeSwgaHR0cDovL2N1cmwuaGF4eC5zZS9cMCIKKyAgICAgIFZBTFVFICJGaWxlRGVzY3JpcHRpb24iLCAgImxpYmN1cmwgU2hhcmVkIExpYnJhcnlcMCIKKyAgICAgIFZBTFVFICJGaWxlVmVyc2lvbiIsICAgICAgTElCQ1VSTF9WRVJTSU9OICJcMCIKKyAgICAgIFZBTFVFICJJbnRlcm5hbE5hbWUiLCAgICAgImxpYmN1cmxcMCIKKyAgICAgIFZBTFVFICJPcmlnaW5hbEZpbGVuYW1lIiwgImxpYmN1cmwuZGxsXDAiCisgICAgICBWQUxVRSAiUHJvZHVjdE5hbWUiLCAgICAgICJUaGUgY1VSTCBsaWJyYXJ5XDAiCisgICAgICBWQUxVRSAiUHJvZHVjdFZlcnNpb24iLCAgIExJQkNVUkxfVkVSU0lPTiAiXDAiCisgICAgICBWQUxVRSAiTGVnYWxDb3B5cmlnaHQiLCAgICKpICIgTElCQ1VSTF9DT1BZUklHSFQgIlwwIgorICAgICAgVkFMVUUgIkxpY2Vuc2UiLCAgICAgICAgICAiaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sXDAiCisgICAgRU5ECisgIEVORAorCisgIEJMT0NLICJWYXJGaWxlSW5mbyIKKyAgQkVHSU4KKyAgICBWQUxVRSAiVHJhbnNsYXRpb24iLCAweDQwOSwgMTIwMAorICBFTkQKK0VORApkaWZmIC0tZ2l0IGEvbGliL2xpYmN1cmwudmNwcm9qIGIvbGliL2xpYmN1cmwudmNwcm9qCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmJiZDI5OTUKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvbGliY3VybC52Y3Byb2oKQEAgLTAsMCArMSwyNTE1IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJXaW5kb3dzLTEyNTIiPz4NCis8VmlzdWFsU3R1ZGlvUHJvamVjdA0KKwlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyINCisJVmVyc2lvbj0iOS4wMCINCisJTmFtZT0ibGliY3VybCINCisJUHJvamVjdEdVSUQ9IntGNjgyOTgxNy1DREJDLTRCQkUtQjYyOS0zQkQyMUY0QTc5N0R9Ig0KKwlSb290TmFtZXNwYWNlPSJsaWJjdXJsIg0KKwlUYXJnZXRGcmFtZXdvcmtWZXJzaW9uPSIwIg0KKwk+DQorCTxQbGF0Zm9ybXM+DQorCQk8UGxhdGZvcm0NCisJCQlOYW1lPSJXaW4zMiINCisJCS8+DQorCTwvUGxhdGZvcm1zPg0KKwk8VG9vbEZpbGVzPg0KKwk8L1Rvb2xGaWxlcz4NCisJPENvbmZpZ3VyYXRpb25zPg0KKwkJPENvbmZpZ3VyYXRpb24NCisJCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCisJCQlPdXRwdXREaXJlY3Rvcnk9IiQoU29sdXRpb25EaXIpJChDb25maWd1cmF0aW9uTmFtZSkiDQorCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIkKENvbmZpZ3VyYXRpb25OYW1lKSINCisJCQlDb25maWd1cmF0aW9uVHlwZT0iNCINCisJCQlVc2VPZk1GQz0iMCINCisJCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iZmFsc2UiDQorCQkJQ2hhcmFjdGVyU2V0PSIyIg0KKwkJCUVuYWJsZU1hbmFnZWRJbmNyZW1lbnRhbEJ1aWxkPSIwIg0KKwkJCT4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNNSURMVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLjsuLlxpbmNsdWRlOyZxdW90Oy4uXC4uXG9wZW5zc2wtMC45LjhoXFdpbjMyXGluY2x1ZGUmcXVvdDs7JnF1b3Q7Li5cLi5cemxpYi0xLjIuMyZxdW90OyINCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO19ERUJVRztCVUlMRElOR19MSUJDVVJMO0NVUkxfU1RBVElDTElCO0NVUkxfRElTQUJMRV9MREFQO1VTRV9TU0xFQVk7VVNFX09QRU5TU0w7SEFWRV9aTElCX0giDQorCQkJCU1pbmltYWxSZWJ1aWxkPSJ0cnVlIg0KKwkJCQlSdW50aW1lTGlicmFyeT0iMyINCisJCQkJRW5hYmxlRW5oYW5jZWRJbnN0cnVjdGlvblNldD0iMSINCisJCQkJUHJlY29tcGlsZWRIZWFkZXJGaWxlPSIiDQorCQkJCVdhcm5pbmdMZXZlbD0iMyINCisJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIg0KKwkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX0RFQlVHIg0KKwkJCQlDdWx0dXJlPSIxMDMzIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNMaWJyYXJpYW5Ub29sIg0KKwkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KKwkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KKwkJCS8+DQorCQk8L0NvbmZpZ3VyYXRpb24+DQorCQk8Q29uZmlndXJhdGlvbg0KKwkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQorCQkJT3V0cHV0RGlyZWN0b3J5PSIkKFNvbHV0aW9uRGlyKSQoQ29uZmlndXJhdGlvbk5hbWUpIg0KKwkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iJChDb25maWd1cmF0aW9uTmFtZSkiDQorCQkJQ29uZmlndXJhdGlvblR5cGU9IjQiDQorCQkJVXNlT2ZNRkM9IjAiDQorCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9ImZhbHNlIg0KKwkJCUNoYXJhY3RlclNldD0iMiINCisJCQlFbmFibGVNYW5hZ2VkSW5jcmVtZW50YWxCdWlsZD0iMCINCisJCQk+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTUlETFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIg0KKwkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuOy4uXGluY2x1ZGU7JnF1b3Q7Li5cLi5cb3BlbnNzbC0wLjkuOGhcV2luMzJcaW5jbHVkZSZxdW90OzsmcXVvdDsuLlwuLlx6bGliLTEuMi4zJnF1b3Q7Ig0KKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lOMzI7TkRFQlVHO0JVSUxESU5HX0xJQkNVUkw7Q1VSTF9TVEFUSUNMSUI7Q1VSTF9ESVNBQkxFX0xEQVA7VVNFX1NTTEVBWTtVU0VfT1BFTlNTTDtIQVZFX1pMSUJfSCINCisJCQkJU3RyaW5nUG9vbGluZz0idHJ1ZSINCisJCQkJUnVudGltZUxpYnJhcnk9IjIiDQorCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJ0cnVlIg0KKwkJCQlFbmFibGVFbmhhbmNlZEluc3RydWN0aW9uU2V0PSIxIg0KKwkJCQlQcmVjb21waWxlZEhlYWRlckZpbGU9IiINCisJCQkJV2FybmluZ0xldmVsPSIzIg0KKwkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiDQorCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJOREVCVUciDQorCQkJCUN1bHR1cmU9IjEwMzMiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0xpYnJhcmlhblRvb2wiDQorCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQorCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQorCQkJLz4NCisJCTwvQ29uZmlndXJhdGlvbj4NCisJPC9Db25maWd1cmF0aW9ucz4NCisJPFJlZmVyZW5jZXM+DQorCTwvUmVmZXJlbmNlcz4NCisJPEZpbGVzPg0KKwkJPEZpbHRlcg0KKwkJCU5hbWU9IlNvdXJjZSBGaWxlcyINCisJCQk+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSJiYXNlNjQuYyINCisJCQkJPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSJjb25uZWN0LmMiDQorCQkJCT4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iY29udGVudF9lbmNvZGluZy5jIg0KKwkJCQk+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWd8V2luMzIiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9ImNvb2tpZS5jIg0KKwkJCQk+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWd8V2luMzIiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9ImN1cmxfYWRkcmluZm8uYyINCisJCQkJPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSJjdXJsX2ZubWF0Y2guYyINCisJCQkJPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSJjdXJsX2dldGhvc3RuYW1lLmMiDQorCQkJCT4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iY3VybF9tZW1yY2hyLmMiDQorCQkJCT4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iY3VybF9yYW5kLmMiDQorCQkJCT4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iY3VybF9ydG1wLmMiDQorCQkJCT4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iY3VybF9zc3BpLmMiDQorCQkJCT4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iY3VybF90aHJlYWRzLmMiDQorCQkJCT4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iZGljdC5jIg0KKwkJCQk+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWd8V2luMzIiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9ImVhc3kuYyINCisJCQkJPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSJlc2NhcGUuYyINCisJCQkJPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSJmaWxlLmMiDQorCQkJCT4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iZmlsZWluZm8uYyINCisJCQkJPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSJmb3JtZGF0YS5jIg0KKwkJCQk+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWd8V2luMzIiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9ImZ0cC5jIg0KKwkJCQk+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWd8V2luMzIiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9ImZ0cGxpc3RwYXJzZXIuYyINCisJCQkJPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSJnZXRlbnYuYyINCisJCQkJPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSJnZXRpbmZvLmMiDQorCQkJCT4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iZ29waGVyLmMiDQorCQkJCT4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iZ3Rscy5jIg0KKwkJCQk+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWd8V2luMzIiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Imhhc2guYyINCisJCQkJPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSJobWFjLmMiDQorCQkJCT4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iaG9zdGFyZXMuYyINCisJCQkJPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSJob3N0YXN5bi5jIg0KKwkJCQk+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWd8V2luMzIiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Imhvc3RpcC5jIg0KKwkJCQk+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWd8V2luMzIiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Imhvc3RpcDQuYyINCisJCQkJPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSJob3N0aXA2LmMiDQorCQkJCT4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iaG9zdHN5bi5jIg0KKwkJCQk+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWd8V2luMzIiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Imhvc3R0aHJlLmMiDQorCQkJCT4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iaHR0cC5jIg0KKwkJCQk+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWd8V2luMzIiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Imh0dHBfY2h1bmtzLmMiDQorCQkJCT4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iaHR0cF9kaWdlc3QuYyINCisJCQkJPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSJodHRwX25lZ290aWF0ZS5jIg0KKwkJCQk+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWd8V2luMzIiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Imh0dHBfbnRsbS5jIg0KKwkJCQk+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWd8V2luMzIiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9ImlmMmlwLmMiDQorCQkJCT4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iaW1hcC5jIg0KKwkJCQk+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWd8V2luMzIiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9ImluZXRfbnRvcC5jIg0KKwkJCQk+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWd8V2luMzIiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9ImluZXRfcHRvbi5jIg0KKwkJCQk+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWd8V2luMzIiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9ImtyYjQuYyINCisJCQkJPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSJrcmI1LmMiDQorCQkJCT4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0ibGRhcC5jIg0KKwkJCQk+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWd8V2luMzIiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9ImxsaXN0LmMiDQorCQkJCT4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0ibWQ0LmMiDQorCQkJCT4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0ibWQ1LmMiDQorCQkJCT4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0ibWVtZGVidWcuYyINCisJCQkJPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSJtcHJpbnRmLmMiDQorCQkJCT4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0ibXVsdGkuYyINCisJCQkJPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSJuZXRyYy5jIg0KKwkJCQk+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWd8V2luMzIiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Im5vbmJsb2NrLmMiDQorCQkJCT4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0ibnNzLmMiDQorCQkJCT4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0ib3BlbmxkYXAuYyINCisJCQkJPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSJwYXJzZWRhdGUuYyINCisJCQkJPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSJwaW5ncG9uZy5jIg0KKwkJCQk+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWd8V2luMzIiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9InBvbGFyc3NsLmMiDQorCQkJCT4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0icG9wMy5jIg0KKwkJCQk+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWd8V2luMzIiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9InByb2dyZXNzLmMiDQorCQkJCT4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0icXNzbC5jIg0KKwkJCQk+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWd8V2luMzIiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9InJhd3N0ci5jIg0KKwkJCQk+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWd8V2luMzIiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9InJ0c3AuYyINCisJCQkJPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSJzZWN1cml0eS5jIg0KKwkJCQk+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWd8V2luMzIiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9InNlbGVjdC5jIg0KKwkJCQk+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWd8V2luMzIiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9InNlbmRmLmMiDQorCQkJCT4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0ic2hhcmUuYyINCisJCQkJPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSJzbGlzdC5jIg0KKwkJCQk+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWd8V2luMzIiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9InNtdHAuYyINCisJCQkJPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSJzb2Nrcy5jIg0KKwkJCQk+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWd8V2luMzIiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9InNvY2tzX2dzc2FwaS5jIg0KKwkJCQk+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWd8V2luMzIiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9InNvY2tzX3NzcGkuYyINCisJCQkJPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSJzcGVlZGNoZWNrLmMiDQorCQkJCT4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0ic3BsYXkuYyINCisJCQkJPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSJzc2guYyINCisJCQkJPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSJzc2xnZW4uYyINCisJCQkJPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSJzc2x1c2UuYyINCisJCQkJPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSJzdHJkdXAuYyINCisJCQkJPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSJzdHJlcXVhbC5jIg0KKwkJCQk+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWd8V2luMzIiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9InN0cmVycm9yLmMiDQorCQkJCT4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0ic3RydG9rLmMiDQorCQkJCT4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0ic3RydG9vZmZ0LmMiDQorCQkJCT4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0idGVsbmV0LmMiDQorCQkJCT4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0idGZ0cC5jIg0KKwkJCQk+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWd8V2luMzIiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9InRpbWV2YWwuYyINCisJCQkJPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSJ0cmFuc2Zlci5jIg0KKwkJCQk+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWd8V2luMzIiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9InVybC5jIg0KKwkJCQk+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWd8V2luMzIiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9InZlcnNpb24uYyINCisJCQkJPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCisJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSJ3YXJubGVzcy5jIg0KKwkJCQk+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWd8V2luMzIiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9IndpbGRjYXJkLmMiDQorCQkJCT4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJPC9GaWxlPg0KKwkJPC9GaWx0ZXI+DQorCQk8RmlsdGVyDQorCQkJTmFtZT0iSGVhZGVyIEZpbGVzIg0KKwkJCT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9ImFycGFfdGVsbmV0LmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSJjb25maWctd2luMzIuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9ImNvbm5lY3QuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9ImNvbnRlbnRfZW5jb2RpbmcuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9ImNvb2tpZS5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iY3VybF9hZGRyaW5mby5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iY3VybF9iYXNlNjQuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9ImN1cmxfZm5tYXRjaC5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iY3VybF9nZXRob3N0bmFtZS5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iY3VybF9obWFjLmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSJjdXJsX2xkYXAuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9ImN1cmxfbWQ0LmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSJjdXJsX21kNS5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iY3VybF9tZW1vcnkuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9ImN1cmxfbWVtcmNoci5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iY3VybF9yYW5kLmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSJjdXJsX3J0bXAuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9ImN1cmxfc3NwaS5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iY3VybF90aHJlYWRzLmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSJjdXJseC5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iZGljdC5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iZWFzeWlmLmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSJlc2NhcGUuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9ImZpbGUuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9ImZpbGVpbmZvLmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSJmb3JtZGF0YS5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iZnRwLmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSJmdHBsaXN0cGFyc2VyLmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSJnZXRpbmZvLmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSJnb3BoZXIuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Imd0bHMuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Imhhc2guaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Imhvc3RpcC5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iaHR0cC5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iaHR0cF9jaHVua3MuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Imh0dHBfZGlnZXN0LmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSJodHRwX25lZ290aWF0ZS5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iaHR0cF9udGxtLmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSJpZjJpcC5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iaW1hcC5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iaW5ldF9udG9wLmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSJpbmV0X3B0b24uaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9ImtyYjQuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9ImxsaXN0LmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSJtZW1kZWJ1Zy5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0ibXVsdGlpZi5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0ibmV0cmMuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Im5vbmJsb2NrLmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSJuc3NnLmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSJwYXJzZWRhdGUuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9InBpbmdwb25nLmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSJwb2xhcnNzbC5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0icG9wMy5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0icHJvZ3Jlc3MuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9InFzc2wuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9InJhd3N0ci5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0icnRzcC5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0ic2VsZWN0LmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSJzZW5kZi5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0ic2V0dXAuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9InNldHVwX29uY2UuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9InNoYXJlLmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSJzbGlzdC5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0ic210cC5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0ic29ja2FkZHIuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9InNvY2tzLmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSJzcGVlZGNoZWNrLmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSJzcGxheS5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0ic3NoLmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSJzc2xnZW4uaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9InNzbHVzZS5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0ic3RyZHVwLmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSJzdHJlcXVhbC5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0ic3RyZXJyb3IuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9InN0cnRvay5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0ic3RydG9vZmZ0LmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSJ0ZWxuZXQuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9InRmdHAuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9InRpbWV2YWwuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9InRyYW5zZmVyLmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSJ1cmwuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9InVybGRhdGEuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Indhcm5sZXNzLmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSJ3aWxkY2FyZC5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJPC9GaWx0ZXI+DQorCQk8RmlsdGVyDQorCQkJTmFtZT0iUmVzb3VyY2UgRmlsZXMiDQorCQkJPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0ibGliY3VybC5yYyINCisJCQkJPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KKwkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQorCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJPC9GaWxlPg0KKwkJPC9GaWx0ZXI+DQorCTwvRmlsZXM+DQorCTxHbG9iYWxzPg0KKwk8L0dsb2JhbHM+DQorPC9WaXN1YWxTdHVkaW9Qcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL2xpYi9sbGlzdC5jIGIvbGliL2xsaXN0LmMKaW5kZXggYTEyMWM2MC4uNzEyMzhmYSAxMDA2NDQKLS0tIGEvbGliL2xsaXN0LmMKKysrIGIvbGliL2xsaXN0LmMKQEAgLTUsNyArNSw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAwOSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKQEAgLTMxLDggKzMxLDggQEAKIC8qIHRoaXMgbXVzdCBiZSB0aGUgbGFzdCBpbmNsdWRlIGZpbGUgKi8KICNpbmNsdWRlICJtZW1kZWJ1Zy5oIgogCi12b2lkCi1DdXJsX2xsaXN0X2luaXQoc3RydWN0IGN1cmxfbGxpc3QgKmwsIGN1cmxfbGxpc3RfZHRvciBkdG9yKQorc3RhdGljIHZvaWQKK2xsaXN0X2luaXQoc3RydWN0IGN1cmxfbGxpc3QgKmwsIGN1cmxfbGxpc3RfZHRvciBkdG9yKQogewogICBsLT5zaXplID0gMDsKICAgbC0+ZHRvciA9IGR0b3I7CkBAIC00OSwxMyArNDksMTkgQEAKICAgaWYoTlVMTCA9PSBsaXN0KQogICAgIHJldHVybiBOVUxMOwogCi0gIEN1cmxfbGxpc3RfaW5pdChsaXN0LCBkdG9yKTsKKyAgbGxpc3RfaW5pdChsaXN0LCBkdG9yKTsKIAogICByZXR1cm4gbGlzdDsKIH0KIAogLyoKLSAqIEN1cmxfbGxpc3RfaW5zZXJ0X25leHQoKSByZXR1cm5zIDEgb24gc3VjY2VzcyBhbmQgMCBvbiBmYWlsdXJlLgorICogQ3VybF9sbGlzdF9pbnNlcnRfbmV4dCgpCisgKgorICogSW5zZXJ0cyBhIG5ldyBsaXN0IGVsZW1lbnQgYWZ0ZXIgdGhlIGdpdmVuIG9uZSAnZScuIElmIHRoZSBnaXZlbiBleGlzdGluZworICogZW50cnkgaXMgTlVMTCBhbmQgdGhlIGxpc3QgYWxyZWFkeSBoYXMgZWxlbWVudHMsIHRoZSBuZXcgb25lIHdpbGwgYmUKKyAqIGluc2VydGVkIGZpcnN0IGluIHRoZSBsaXN0LgorICoKKyAqIFJldHVybnM6IDEgb24gc3VjY2VzcyBhbmQgMCBvbiBmYWlsdXJlLgogICovCiBpbnQKIEN1cmxfbGxpc3RfaW5zZXJ0X25leHQoc3RydWN0IGN1cmxfbGxpc3QgKmxpc3QsIHN0cnVjdCBjdXJsX2xsaXN0X2VsZW1lbnQgKmUsCkBAIC03MywxNSArNzksMjEgQEAKICAgICBsaXN0LT50YWlsID0gbmU7CiAgIH0KICAgZWxzZSB7Ci0gICAgbmUtPm5leHQgPSBlLT5uZXh0OworICAgIC8qIGlmICdlJyBpcyBOVUxMIGhlcmUsIHdlIGluc2VydCB0aGUgbmV3IGVsZW1lbnQgZmlyc3QgaW4gdGhlIGxpc3QgKi8KKyAgICBuZS0+bmV4dCA9IGU/ZS0+bmV4dDpsaXN0LT5oZWFkOwogICAgIG5lLT5wcmV2ID0gZTsKLSAgICBpZihlLT5uZXh0KSB7CisgICAgaWYoIWUpIHsKKyAgICAgIGxpc3QtPmhlYWQtPnByZXYgPSBuZTsKKyAgICAgIGxpc3QtPmhlYWQgPSBuZTsKKyAgICB9CisgICAgZWxzZSBpZihlLT5uZXh0KSB7CiAgICAgICBlLT5uZXh0LT5wcmV2ID0gbmU7CiAgICAgfQogICAgIGVsc2UgewogICAgICAgbGlzdC0+dGFpbCA9IG5lOwogICAgIH0KLSAgICBlLT5uZXh0ID0gbmU7CisgICAgaWYoZSkKKyAgICAgIGUtPm5leHQgPSBuZTsKICAgfQogCiAgICsrbGlzdC0+c2l6ZTsKZGlmZiAtLWdpdCBhL2xpYi9sbGlzdC5oIGIvbGliL2xsaXN0LmgKaW5kZXggMzU4ZDNkNi4uYzMzOTEyYSAxMDA2NDQKLS0tIGEvbGliL2xsaXN0LmgKKysrIGIvbGliL2xsaXN0LmgKQEAgLTcsNyArNyw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAwOCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKQEAgLTQzLDE2ICs0MywxMSBAQAogICBzaXplX3Qgc2l6ZTsKIH07CiAKLXZvaWQgQ3VybF9sbGlzdF9pbml0KHN0cnVjdCBjdXJsX2xsaXN0ICosIGN1cmxfbGxpc3RfZHRvcik7CiBzdHJ1Y3QgY3VybF9sbGlzdCAqQ3VybF9sbGlzdF9hbGxvYyhjdXJsX2xsaXN0X2R0b3IpOwogaW50IEN1cmxfbGxpc3RfaW5zZXJ0X25leHQoc3RydWN0IGN1cmxfbGxpc3QgKiwgc3RydWN0IGN1cmxfbGxpc3RfZWxlbWVudCAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqKTsKLWludCBDdXJsX2xsaXN0X2luc2VydF9wcmV2KHN0cnVjdCBjdXJsX2xsaXN0ICosIHN0cnVjdCBjdXJsX2xsaXN0X2VsZW1lbnQgKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKik7CiBpbnQgQ3VybF9sbGlzdF9yZW1vdmUoc3RydWN0IGN1cmxfbGxpc3QgKiwgc3RydWN0IGN1cmxfbGxpc3RfZWxlbWVudCAqLAogICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKik7Ci1pbnQgQ3VybF9sbGlzdF9yZW1vdmVfbmV4dChzdHJ1Y3QgY3VybF9sbGlzdCAqLCBzdHJ1Y3QgY3VybF9sbGlzdF9lbGVtZW50ICosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICopOwogc2l6ZV90IEN1cmxfbGxpc3RfY291bnQoc3RydWN0IGN1cmxfbGxpc3QgKik7CiB2b2lkIEN1cmxfbGxpc3RfZGVzdHJveShzdHJ1Y3QgY3VybF9sbGlzdCAqLCB2b2lkICopOwogaW50IEN1cmxfbGxpc3RfbW92ZShzdHJ1Y3QgY3VybF9sbGlzdCAqLCBzdHJ1Y3QgY3VybF9sbGlzdF9lbGVtZW50ICosCmRpZmYgLS1naXQgYS9saWIvbWFrZWZpbGUuYW1pZ2EgYi9saWIvbWFrZWZpbGUuYW1pZ2EKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2I3ZmE4ZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9tYWtlZmlsZS5hbWlnYQpAQCAtMCwwICsxLDIyIEBACisjCisjIGxpYmN1cmwgTWFrZWZpbGUgZm9yIEFtaWdhT1MgLi4uCisjCisKKyMgY2hhbmdlIHRoZSBmb2xsb3cgdG8gd2hlcmUgeW91IGhhdmUgdGhlIEFtaVRDUCBTREsgdjQuMyBpbmNsdWRlczoKKworQVRDUFNES0k9CS9HRy9uZXRpbmNsdWRlCisKKworQ0MJPQltNjhrLWFtaWdhb3MtZ2NjCitDRkxBR1MJPQktSSQoQVRDUFNES0kpIC1tNjgwMjAtNjAgLU8yIC1tc29mdC1mbG9hdCAtbm9peGVtdWwgLWcgLUkuIC1JLi4vaW5jbHVkZSAtVyAtV2FsbAorCitpbmNsdWRlIE1ha2VmaWxlLmluYworQ1NPVVJDRVMgKz0gYW1pZ2Fvcy5jCitPQkpTID0gJChDU09VUkNFUzouYz0ubykKKworYWxsOgkkKE9CSlMpCisJYXIgY3J1IGxpYmN1cmwuYSAkKE9CSlMpCisJcmFubGliIGxpYmN1cmwuYQorCitpbnN0YWxsOgorCSQoSU5TVEFMTCkgLWMgLi9saWJjdXJsLmEgL2xpYi9saWJjdXJsLmEKZGlmZiAtLWdpdCBhL2xpYi9tYWtlZmlsZS5kaiBiL2xpYi9tYWtlZmlsZS5kagpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MGZhZjMzCi0tLSAvZGV2L251bGwKKysrIGIvbGliL21ha2VmaWxlLmRqCkBAIC0wLDAgKzEsNDkgQEAKKyMKKyMgIEFkYXB0ZWQgZm9yIGRqZ3BwMiAvIFdhdHQtMzIgLyBET1MgYnkKKyMgIEdpc2xlIFZhbmVtIDxnaXZhQGJnbmV0dC5ubz4KKyMKKworREVQRU5EX1BSRVJFUSA9IGN1cmxfY29uZmlnLmgKK1RPUERJUiA9IC4uCisKK2luY2x1ZGUgLi4vcGFja2FnZXMvRE9TL2NvbW1vbi5kagoraW5jbHVkZSBNYWtlZmlsZS5pbmMKKworT0JKRUNUUyA6PSAkKHBhdHN1YnN0ICUuYywkKE9CSl9ESVIpLyUubywkKHN0cmlwICQoQ1NPVVJDRVMpKSkKKworQ1VSTF9MSUIgPSBsaWJjdXJsLmEKKworIyBOT1RFOiBpZiAuLi9pbmNsdWRlL2N1cmwvY3VybGJ1aWxkLmggaXMgbWlzc2luZywgeW91J3JlIHByb2JhYmx5IGJ1aWxkaW5nCisjIHRoaXMgZnJvbSBhIGdpdCBjaGVja291dCBhbmQgdGhlbiB5b3UgbmVlZCB0byBydW4gYnVpbGRjb25mLmJhdCBmaXJzdC4KKworYWxsOiAkKE9CSl9ESVIpIGN1cmxfY29uZmlnLmggJChDVVJMX0xJQikKKworJChDVVJMX0xJQik6ICQoT0JKRUNUUykKKwlhciBycyAkQCAkPworCitjdXJsX2NvbmZpZy5oOiBjb25maWcuZG9zCisJJChDT1BZKSAkXiAkQAorCisjIGNsZWFuIGdlbmVyYXRlZCBmaWxlcworIworZ2VuY2xlYW46CisJLSAkKERFTEVURSkgY3VybF9jb25maWcuaAorCisjIGNsZWFuIG9iamVjdCBmaWxlcyBhbmQgc3ViZGlyCisjCitvYmpjbGVhbjogZ2VuY2xlYW4KKwktICQoREVMRVRFKSAkKE9CSl9ESVIpJChEUykqLm8KKwktICQoUk1ESVIpICQoT0JKX0RJUikKKworIyBjbGVhbiB3aXRob3V0IHJlbW92aW5nIGJ1aWx0IGxpYnJhcnkKKyMKK2NsZWFuOiBvYmpjbGVhbgorCS0gJChERUxFVEUpIGRlcGVuZC5kagorCisjIGNsZWFuIGV2ZXJ5dGhpbmcKKyMKK3JlYWxjbGVhbiB2Y2xlYW46IGNsZWFuCisJLSAkKERFTEVURSkgJChDVVJMX0xJQikKKworLWluY2x1ZGUgZGVwZW5kLmRqCisKZGlmZiAtLWdpdCBhL2xpYi9tZDQuYyBiL2xpYi9tZDQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lY2YzYmZjCi0tLSAvZGV2L251bGwKKysrIGIvbGliL21kNC5jCkBAIC0wLDAgKzEsMjgxIEBACisvKi0KKyAgIENvcHlyaWdodCAoQykgMTk5MC0yLCBSU0EgRGF0YSBTZWN1cml0eSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorCisgICBMaWNlbnNlIHRvIGNvcHkgYW5kIHVzZSB0aGlzIHNvZnR3YXJlIGlzIGdyYW50ZWQgcHJvdmlkZWQgdGhhdCBpdAorICAgaXMgaWRlbnRpZmllZCBhcyB0aGUgIlJTQSBEYXRhIFNlY3VyaXR5LCBJbmMuIE1ENCBNZXNzYWdlLURpZ2VzdAorICAgQWxnb3JpdGhtIiBpbiBhbGwgbWF0ZXJpYWwgbWVudGlvbmluZyBvciByZWZlcmVuY2luZyB0aGlzIHNvZnR3YXJlCisgICBvciB0aGlzIGZ1bmN0aW9uLgorCisgICBMaWNlbnNlIGlzIGFsc28gZ3JhbnRlZCB0byBtYWtlIGFuZCB1c2UgZGVyaXZhdGl2ZSB3b3JrcyBwcm92aWRlZAorICAgdGhhdCBzdWNoIHdvcmtzIGFyZSBpZGVudGlmaWVkIGFzICJkZXJpdmVkIGZyb20gdGhlIFJTQSBEYXRhCisgICBTZWN1cml0eSwgSW5jLiBNRDQgTWVzc2FnZS1EaWdlc3QgQWxnb3JpdGhtIiBpbiBhbGwgbWF0ZXJpYWwKKyAgIG1lbnRpb25pbmcgb3IgcmVmZXJlbmNpbmcgdGhlIGRlcml2ZWQgd29yay4KKworICAgUlNBIERhdGEgU2VjdXJpdHksIEluYy4gbWFrZXMgbm8gcmVwcmVzZW50YXRpb25zIGNvbmNlcm5pbmcgZWl0aGVyCisgICB0aGUgbWVyY2hhbnRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgb3IgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMKKyAgIHNvZnR3YXJlIGZvciBhbnkgcGFydGljdWxhciBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCAiYXMgaXMiCisgICB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eSBvZiBhbnkga2luZC4KKworICAgVGhlc2Ugbm90aWNlcyBtdXN0IGJlIHJldGFpbmVkIGluIGFueSBjb3BpZXMgb2YgYW55IHBhcnQgb2YgdGhpcworICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igc29mdHdhcmUuCisgKi8KKworI2luY2x1ZGUgInNldHVwLmgiCisKKy8qIE5TUyBjcnlwdG8gbGlicmFyeSBkb2VzIG5vdCBwcm92aWRlIHRoZSBNRDQgaGFzaCBhbGdvcml0aG0sIHNvIHRoYXQgd2UgaGF2ZQorICogYSBsb2NhbCBpbXBsZW1lbnRhdGlvbiBvZiBpdCAqLworI2lmZGVmIFVTRV9OU1MKKworI2luY2x1ZGUgImN1cmxfbWQ0LmgiCisjaW5jbHVkZSA8c3RyaW5nLmg+CisKK3R5cGVkZWYgdW5zaWduZWQgaW50IFVJTlQ0OworCit0eXBlZGVmIHN0cnVjdCBNRDRDb250ZXh0IHsKKyAgVUlOVDQgc3RhdGVbNF07ICAgICAgICAgICAgICAgLyogc3RhdGUgKEFCQ0QpICovCisgIFVJTlQ0IGNvdW50WzJdOyAgICAgICAgICAgICAgIC8qIG51bWJlciBvZiBiaXRzLCBtb2R1bG8gMl42NCAobHNiIGZpcnN0KSAqLworICB1bnNpZ25lZCBjaGFyIGJ1ZmZlcls2NF07ICAgICAvKiBpbnB1dCBidWZmZXIgKi8KK30gTUQ0X0NUWDsKKworLyogQ29uc3RhbnRzIGZvciBNRDRUcmFuc2Zvcm0gcm91dGluZS4KKyAqLworI2RlZmluZSBTMTEgMworI2RlZmluZSBTMTIgNworI2RlZmluZSBTMTMgMTEKKyNkZWZpbmUgUzE0IDE5CisjZGVmaW5lIFMyMSAzCisjZGVmaW5lIFMyMiA1CisjZGVmaW5lIFMyMyA5CisjZGVmaW5lIFMyNCAxMworI2RlZmluZSBTMzEgMworI2RlZmluZSBTMzIgOQorI2RlZmluZSBTMzMgMTEKKyNkZWZpbmUgUzM0IDE1CisKK3N0YXRpYyB2b2lkIE1ENFRyYW5zZm9ybShVSU5UNCBbNF0sIGNvbnN0IHVuc2lnbmVkIGNoYXIgWzY0XSk7CitzdGF0aWMgdm9pZCBFbmNvZGUodW5zaWduZWQgY2hhciAqLCBVSU5UNCAqLCB1bnNpZ25lZCBpbnQpOworc3RhdGljIHZvaWQgRGVjb2RlKFVJTlQ0ICosIGNvbnN0IHVuc2lnbmVkIGNoYXIgKiwgdW5zaWduZWQgaW50KTsKKworc3RhdGljIHVuc2lnbmVkIGNoYXIgUEFERElOR1s2NF0gPSB7CisgIDB4ODAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAKK307CisKKy8qIEYsIEcgYW5kIEggYXJlIGJhc2ljIE1ENCBmdW5jdGlvbnMuCisgKi8KKyNkZWZpbmUgRih4LCB5LCB6KSAoKCh4KSAmICh5KSkgfCAoKH54KSAmICh6KSkpCisjZGVmaW5lIEcoeCwgeSwgeikgKCgoeCkgJiAoeSkpIHwgKCh4KSAmICh6KSkgfCAoKHkpICYgKHopKSkKKyNkZWZpbmUgSCh4LCB5LCB6KSAoKHgpIF4gKHkpIF4gKHopKQorCisvKiBST1RBVEVfTEVGVCByb3RhdGVzIHggbGVmdCBuIGJpdHMuCisgKi8KKyNkZWZpbmUgUk9UQVRFX0xFRlQoeCwgbikgKCgoeCkgPDwgKG4pKSB8ICgoeCkgPj4gKDMyLShuKSkpKQorCisvKiBGRiwgR0cgYW5kIEhIIGFyZSB0cmFuc2Zvcm1hdGlvbnMgZm9yIHJvdW5kcyAxLCAyIGFuZCAzICovCisvKiBSb3RhdGlvbiBpcyBzZXBhcmF0ZSBmcm9tIGFkZGl0aW9uIHRvIHByZXZlbnQgcmVjb21wdXRhdGlvbiAqLworI2RlZmluZSBGRihhLCBiLCBjLCBkLCB4LCBzKSB7IFwKKyAgICAoYSkgKz0gRiAoKGIpLCAoYyksIChkKSkgKyAoeCk7IFwKKyAgICAoYSkgPSBST1RBVEVfTEVGVCAoKGEpLCAocykpOyBcCisgIH0KKyNkZWZpbmUgR0coYSwgYiwgYywgZCwgeCwgcykgeyBcCisgICAgKGEpICs9IEcgKChiKSwgKGMpLCAoZCkpICsgKHgpICsgKFVJTlQ0KTB4NWE4Mjc5OTk7IFwKKyAgICAoYSkgPSBST1RBVEVfTEVGVCAoKGEpLCAocykpOyBcCisgIH0KKyNkZWZpbmUgSEgoYSwgYiwgYywgZCwgeCwgcykgeyBcCisgICAgKGEpICs9IEggKChiKSwgKGMpLCAoZCkpICsgKHgpICsgKFVJTlQ0KTB4NmVkOWViYTE7IFwKKyAgICAoYSkgPSBST1RBVEVfTEVGVCAoKGEpLCAocykpOyBcCisgIH0KKworLyogTUQ0IGluaXRpYWxpemF0aW9uLiBCZWdpbnMgYW4gTUQ0IG9wZXJhdGlvbiwgd3JpdGluZyBhIG5ldyBjb250ZXh0LgorICovCitzdGF0aWMgdm9pZCBNRDRJbml0KE1ENF9DVFggKmNvbnRleHQpCit7CisgIGNvbnRleHQtPmNvdW50WzBdID0gY29udGV4dC0+Y291bnRbMV0gPSAwOworCisgIC8qIExvYWQgbWFnaWMgaW5pdGlhbGl6YXRpb24gY29uc3RhbnRzLgorICAgKi8KKyAgY29udGV4dC0+c3RhdGVbMF0gPSAweDY3NDUyMzAxOworICBjb250ZXh0LT5zdGF0ZVsxXSA9IDB4ZWZjZGFiODk7CisgIGNvbnRleHQtPnN0YXRlWzJdID0gMHg5OGJhZGNmZTsKKyAgY29udGV4dC0+c3RhdGVbM10gPSAweDEwMzI1NDc2OworfQorCisvKiBNRDQgYmxvY2sgdXBkYXRlIG9wZXJhdGlvbi4gQ29udGludWVzIGFuIE1ENCBtZXNzYWdlLWRpZ2VzdAorICAgICBvcGVyYXRpb24sIHByb2Nlc3NpbmcgYW5vdGhlciBtZXNzYWdlIGJsb2NrLCBhbmQgdXBkYXRpbmcgdGhlCisgICAgIGNvbnRleHQuCisgKi8KK3N0YXRpYyB2b2lkIE1ENFVwZGF0ZShNRDRfQ1RYICpjb250ZXh0LCBjb25zdCB1bnNpZ25lZCBjaGFyICppbnB1dCwKKyAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgaW5wdXRMZW4pCit7CisgIHVuc2lnbmVkIGludCBpLCBidWZpbmRleCwgcGFydExlbjsKKworICAvKiBDb21wdXRlIG51bWJlciBvZiBieXRlcyBtb2QgNjQgKi8KKyAgYnVmaW5kZXggPSAodW5zaWduZWQgaW50KSgoY29udGV4dC0+Y291bnRbMF0gPj4gMykgJiAweDNGKTsKKyAgLyogVXBkYXRlIG51bWJlciBvZiBiaXRzICovCisgIGlmICgoY29udGV4dC0+Y291bnRbMF0gKz0gKChVSU5UNClpbnB1dExlbiA8PCAzKSkKKyAgICAgIDwgKChVSU5UNClpbnB1dExlbiA8PCAzKSkKKyAgICBjb250ZXh0LT5jb3VudFsxXSsrOworICBjb250ZXh0LT5jb3VudFsxXSArPSAoKFVJTlQ0KWlucHV0TGVuID4+IDI5KTsKKworICBwYXJ0TGVuID0gNjQgLSBidWZpbmRleDsKKyAgLyogVHJhbnNmb3JtIGFzIG1hbnkgdGltZXMgYXMgcG9zc2libGUuCisgICAqLworICBpZiAoaW5wdXRMZW4gPj0gcGFydExlbikgeworICAgIG1lbWNweSgmY29udGV4dC0+YnVmZmVyW2J1ZmluZGV4XSwgaW5wdXQsIHBhcnRMZW4pOworICAgIE1ENFRyYW5zZm9ybSAoY29udGV4dC0+c3RhdGUsIGNvbnRleHQtPmJ1ZmZlcik7CisKKyAgICBmb3IgKGkgPSBwYXJ0TGVuOyBpICsgNjMgPCBpbnB1dExlbjsgaSArPSA2NCkKKyAgICAgIE1ENFRyYW5zZm9ybSAoY29udGV4dC0+c3RhdGUsICZpbnB1dFtpXSk7CisKKyAgICBidWZpbmRleCA9IDA7CisgIH0KKyAgZWxzZQorICAgIGkgPSAwOworCisgIC8qIEJ1ZmZlciByZW1haW5pbmcgaW5wdXQgKi8KKyAgbWVtY3B5KCZjb250ZXh0LT5idWZmZXJbYnVmaW5kZXhdLCAmaW5wdXRbaV0sIGlucHV0TGVuLWkpOworfQorCisvKiBNRDQgcGFkZGluZy4gKi8KK3N0YXRpYyB2b2lkIE1ENFBhZChNRDRfQ1RYICpjb250ZXh0KQoreworICB1bnNpZ25lZCBjaGFyIGJpdHNbOF07CisgIHVuc2lnbmVkIGludCBidWZpbmRleCwgcGFkTGVuOworCisgIC8qIFNhdmUgbnVtYmVyIG9mIGJpdHMgKi8KKyAgRW5jb2RlIChiaXRzLCBjb250ZXh0LT5jb3VudCwgOCk7CisKKyAgLyogUGFkIG91dCB0byA1NiBtb2QgNjQuCisgICAqLworICBidWZpbmRleCA9ICh1bnNpZ25lZCBpbnQpKChjb250ZXh0LT5jb3VudFswXSA+PiAzKSAmIDB4M2YpOworICBwYWRMZW4gPSAoYnVmaW5kZXggPCA1NikgPyAoNTYgLSBidWZpbmRleCkgOiAoMTIwIC0gYnVmaW5kZXgpOworICBNRDRVcGRhdGUgKGNvbnRleHQsIFBBRERJTkcsIHBhZExlbik7CisKKyAgLyogQXBwZW5kIGxlbmd0aCAoYmVmb3JlIHBhZGRpbmcpICovCisgIE1ENFVwZGF0ZSAoY29udGV4dCwgYml0cywgOCk7Cit9CisKKy8qIE1ENCBmaW5hbGl6YXRpb24uIEVuZHMgYW4gTUQ0IG1lc3NhZ2UtZGlnZXN0IG9wZXJhdGlvbiwgd3JpdGluZyB0aGUKKyAgICAgdGhlIG1lc3NhZ2UgZGlnZXN0IGFuZCB6ZXJvaXppbmcgdGhlIGNvbnRleHQuCisgKi8KK3N0YXRpYyB2b2lkIE1ENEZpbmFsICh1bnNpZ25lZCBjaGFyIGRpZ2VzdFsxNl0sIE1ENF9DVFggKmNvbnRleHQpCit7CisgIC8qIERvIHBhZGRpbmcgKi8KKyAgTUQ0UGFkIChjb250ZXh0KTsKKworICAvKiBTdG9yZSBzdGF0ZSBpbiBkaWdlc3QgKi8KKyAgRW5jb2RlIChkaWdlc3QsIGNvbnRleHQtPnN0YXRlLCAxNik7CisKKyAgLyogWmVyb2l6ZSBzZW5zaXRpdmUgaW5mb3JtYXRpb24uCisgICAqLworICBtZW1zZXQoY29udGV4dCwgMCwgc2l6ZW9mKCpjb250ZXh0KSk7Cit9CisKKy8qIE1ENCBiYXNpYyB0cmFuc2Zvcm1hdGlvbi4gVHJhbnNmb3JtcyBzdGF0ZSBiYXNlZCBvbiBibG9jay4KKyAqLworc3RhdGljIHZvaWQgTUQ0VHJhbnNmb3JtIChVSU5UNCBzdGF0ZVs0XSwgY29uc3QgdW5zaWduZWQgY2hhciBibG9ja1s2NF0pCit7CisgIFVJTlQ0IGEgPSBzdGF0ZVswXSwgYiA9IHN0YXRlWzFdLCBjID0gc3RhdGVbMl0sIGQgPSBzdGF0ZVszXSwgeFsxNl07CisKKyAgRGVjb2RlICh4LCBibG9jaywgNjQpOworCisgIC8qIFJvdW5kIDEgKi8KKyAgRkYgKGEsIGIsIGMsIGQsIHhbIDBdLCBTMTEpOyAvKiAxICovCisgIEZGIChkLCBhLCBiLCBjLCB4WyAxXSwgUzEyKTsgLyogMiAqLworICBGRiAoYywgZCwgYSwgYiwgeFsgMl0sIFMxMyk7IC8qIDMgKi8KKyAgRkYgKGIsIGMsIGQsIGEsIHhbIDNdLCBTMTQpOyAvKiA0ICovCisgIEZGIChhLCBiLCBjLCBkLCB4WyA0XSwgUzExKTsgLyogNSAqLworICBGRiAoZCwgYSwgYiwgYywgeFsgNV0sIFMxMik7IC8qIDYgKi8KKyAgRkYgKGMsIGQsIGEsIGIsIHhbIDZdLCBTMTMpOyAvKiA3ICovCisgIEZGIChiLCBjLCBkLCBhLCB4WyA3XSwgUzE0KTsgLyogOCAqLworICBGRiAoYSwgYiwgYywgZCwgeFsgOF0sIFMxMSk7IC8qIDkgKi8KKyAgRkYgKGQsIGEsIGIsIGMsIHhbIDldLCBTMTIpOyAvKiAxMCAqLworICBGRiAoYywgZCwgYSwgYiwgeFsxMF0sIFMxMyk7IC8qIDExICovCisgIEZGIChiLCBjLCBkLCBhLCB4WzExXSwgUzE0KTsgLyogMTIgKi8KKyAgRkYgKGEsIGIsIGMsIGQsIHhbMTJdLCBTMTEpOyAvKiAxMyAqLworICBGRiAoZCwgYSwgYiwgYywgeFsxM10sIFMxMik7IC8qIDE0ICovCisgIEZGIChjLCBkLCBhLCBiLCB4WzE0XSwgUzEzKTsgLyogMTUgKi8KKyAgRkYgKGIsIGMsIGQsIGEsIHhbMTVdLCBTMTQpOyAvKiAxNiAqLworCisgIC8qIFJvdW5kIDIgKi8KKyAgR0cgKGEsIGIsIGMsIGQsIHhbIDBdLCBTMjEpOyAvKiAxNyAqLworICBHRyAoZCwgYSwgYiwgYywgeFsgNF0sIFMyMik7IC8qIDE4ICovCisgIEdHIChjLCBkLCBhLCBiLCB4WyA4XSwgUzIzKTsgLyogMTkgKi8KKyAgR0cgKGIsIGMsIGQsIGEsIHhbMTJdLCBTMjQpOyAvKiAyMCAqLworICBHRyAoYSwgYiwgYywgZCwgeFsgMV0sIFMyMSk7IC8qIDIxICovCisgIEdHIChkLCBhLCBiLCBjLCB4WyA1XSwgUzIyKTsgLyogMjIgKi8KKyAgR0cgKGMsIGQsIGEsIGIsIHhbIDldLCBTMjMpOyAvKiAyMyAqLworICBHRyAoYiwgYywgZCwgYSwgeFsxM10sIFMyNCk7IC8qIDI0ICovCisgIEdHIChhLCBiLCBjLCBkLCB4WyAyXSwgUzIxKTsgLyogMjUgKi8KKyAgR0cgKGQsIGEsIGIsIGMsIHhbIDZdLCBTMjIpOyAvKiAyNiAqLworICBHRyAoYywgZCwgYSwgYiwgeFsxMF0sIFMyMyk7IC8qIDI3ICovCisgIEdHIChiLCBjLCBkLCBhLCB4WzE0XSwgUzI0KTsgLyogMjggKi8KKyAgR0cgKGEsIGIsIGMsIGQsIHhbIDNdLCBTMjEpOyAvKiAyOSAqLworICBHRyAoZCwgYSwgYiwgYywgeFsgN10sIFMyMik7IC8qIDMwICovCisgIEdHIChjLCBkLCBhLCBiLCB4WzExXSwgUzIzKTsgLyogMzEgKi8KKyAgR0cgKGIsIGMsIGQsIGEsIHhbMTVdLCBTMjQpOyAvKiAzMiAqLworCisgIC8qIFJvdW5kIDMgKi8KKyAgSEggKGEsIGIsIGMsIGQsIHhbIDBdLCBTMzEpOyAvKiAzMyAqLworICBISCAoZCwgYSwgYiwgYywgeFsgOF0sIFMzMik7IC8qIDM0ICovCisgIEhIIChjLCBkLCBhLCBiLCB4WyA0XSwgUzMzKTsgLyogMzUgKi8KKyAgSEggKGIsIGMsIGQsIGEsIHhbMTJdLCBTMzQpOyAvKiAzNiAqLworICBISCAoYSwgYiwgYywgZCwgeFsgMl0sIFMzMSk7IC8qIDM3ICovCisgIEhIIChkLCBhLCBiLCBjLCB4WzEwXSwgUzMyKTsgLyogMzggKi8KKyAgSEggKGMsIGQsIGEsIGIsIHhbIDZdLCBTMzMpOyAvKiAzOSAqLworICBISCAoYiwgYywgZCwgYSwgeFsxNF0sIFMzNCk7IC8qIDQwICovCisgIEhIIChhLCBiLCBjLCBkLCB4WyAxXSwgUzMxKTsgLyogNDEgKi8KKyAgSEggKGQsIGEsIGIsIGMsIHhbIDldLCBTMzIpOyAvKiA0MiAqLworICBISCAoYywgZCwgYSwgYiwgeFsgNV0sIFMzMyk7IC8qIDQzICovCisgIEhIIChiLCBjLCBkLCBhLCB4WzEzXSwgUzM0KTsgLyogNDQgKi8KKyAgSEggKGEsIGIsIGMsIGQsIHhbIDNdLCBTMzEpOyAvKiA0NSAqLworICBISCAoZCwgYSwgYiwgYywgeFsxMV0sIFMzMik7IC8qIDQ2ICovCisgIEhIIChjLCBkLCBhLCBiLCB4WyA3XSwgUzMzKTsgLyogNDcgKi8KKyAgSEggKGIsIGMsIGQsIGEsIHhbMTVdLCBTMzQpOyAvKiA0OCAqLworCisgIHN0YXRlWzBdICs9IGE7CisgIHN0YXRlWzFdICs9IGI7CisgIHN0YXRlWzJdICs9IGM7CisgIHN0YXRlWzNdICs9IGQ7CisKKyAgLyogWmVyb2l6ZSBzZW5zaXRpdmUgaW5mb3JtYXRpb24uCisgICAqLworICBtZW1zZXQoeCwgMCwgc2l6ZW9mKHgpKTsKK30KKworLyogRW5jb2RlcyBpbnB1dCAoVUlOVDQpIGludG8gb3V0cHV0ICh1bnNpZ25lZCBjaGFyKS4gQXNzdW1lcyBsZW4gaXMKKyAgICAgYSBtdWx0aXBsZSBvZiA0LgorICovCitzdGF0aWMgdm9pZCBFbmNvZGUodW5zaWduZWQgY2hhciAqb3V0cHV0LCBVSU5UNCAqaW5wdXQsIHVuc2lnbmVkIGludCBsZW4pCit7CisgIHVuc2lnbmVkIGludCBpLCBqOworCisgIGZvciAoaSA9IDAsIGogPSAwOyBqIDwgbGVuOyBpKyssIGogKz0gNCkgeworICAgIG91dHB1dFtqXSA9ICh1bnNpZ25lZCBjaGFyKShpbnB1dFtpXSAmIDB4ZmYpOworICAgIG91dHB1dFtqKzFdID0gKHVuc2lnbmVkIGNoYXIpKChpbnB1dFtpXSA+PiA4KSAmIDB4ZmYpOworICAgIG91dHB1dFtqKzJdID0gKHVuc2lnbmVkIGNoYXIpKChpbnB1dFtpXSA+PiAxNikgJiAweGZmKTsKKyAgICBvdXRwdXRbaiszXSA9ICh1bnNpZ25lZCBjaGFyKSgoaW5wdXRbaV0gPj4gMjQpICYgMHhmZik7CisgIH0KK30KKworLyogRGVjb2RlcyBpbnB1dCAodW5zaWduZWQgY2hhcikgaW50byBvdXRwdXQgKFVJTlQ0KS4gQXNzdW1lcyBsZW4gaXMKKyAgICAgYSBtdWx0aXBsZSBvZiA0LgorICovCitzdGF0aWMgdm9pZCBEZWNvZGUgKFVJTlQ0ICpvdXRwdXQsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmlucHV0LCB1bnNpZ25lZCBpbnQgbGVuKQoreworICB1bnNpZ25lZCBpbnQgaSwgajsKKworICBmb3IgKGkgPSAwLCBqID0gMDsgaiA8IGxlbjsgaSsrLCBqICs9IDQpCisgICAgb3V0cHV0W2ldID0gKChVSU5UNClpbnB1dFtqXSkgfCAoKChVSU5UNClpbnB1dFtqKzFdKSA8PCA4KSB8CisgICAgICAoKChVSU5UNClpbnB1dFtqKzJdKSA8PCAxNikgfCAoKChVSU5UNClpbnB1dFtqKzNdKSA8PCAyNCk7Cit9CisKK3ZvaWQgQ3VybF9tZDRpdCh1bnNpZ25lZCBjaGFyICpvdXRwdXQsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmlucHV0LCBzaXplX3QgbGVuKQoreworICBNRDRfQ1RYIGN0eDsKKyAgTUQ0SW5pdCgmY3R4KTsKKyAgTUQ0VXBkYXRlKCZjdHgsIGlucHV0LCAodW5zaWduZWQgaW50KWxlbik7CisgIE1ENEZpbmFsKG91dHB1dCwgJmN0eCk7Cit9CisjZW5kaWYgLyogVVNFX05TUyAqLwpkaWZmIC0tZ2l0IGEvbGliL21kNS5jIGIvbGliL21kNS5jCmluZGV4IDMyZDA2MzQuLmIzOTEyYzUgMTAwNjQ0Ci0tLSBhL2xpYi9tZDUuYworKysgYi9saWIvbWQ1LmMKQEAgLTUsNyArNSw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAwOCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKQEAgLTI3LDE5ICsyNywzMCBAQAogI2luY2x1ZGUgPHN0cmluZy5oPgogCiAjaW5jbHVkZSAiY3VybF9tZDUuaCIKKyNpbmNsdWRlICJjdXJsX2htYWMuaCIKIAogI2lmZGVmIFVTRV9HTlVUTFMKIAogI2luY2x1ZGUgPGdjcnlwdC5oPgogCi12b2lkIEN1cmxfbWQ1aXQodW5zaWduZWQgY2hhciAqb3V0YnVmZmVyLCAvKiAxNiBieXRlcyAqLwotICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmlucHV0KQordHlwZWRlZiBnY3J5X21kX2hkX3QgTUQ1X0NUWDsKKworc3RhdGljIHZvaWQgTUQ1X0luaXQoTUQ1X0NUWCAqIGN0eCkKIHsKLSAgZ2NyeV9tZF9oZF90IGN0eDsKLSAgZ2NyeV9tZF9vcGVuKCZjdHgsIEdDUllfTURfTUQ1LCAwKTsKLSAgZ2NyeV9tZF93cml0ZShjdHgsIGlucHV0LCAodW5zaWduZWQgaW50KXN0cmxlbigoY2hhciAqKWlucHV0KSk7Ci0gIG1lbWNweSAob3V0YnVmZmVyLCBnY3J5X21kX3JlYWQgKGN0eCwgMCksIDE2KTsKLSAgZ2NyeV9tZF9jbG9zZShjdHgpOworICBnY3J5X21kX29wZW4oY3R4LCBHQ1JZX01EX01ENSwgMCk7Cit9CisKK3N0YXRpYyB2b2lkIE1ENV9VcGRhdGUoTUQ1X0NUWCAqIGN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqIGlucHV0LAorICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgaW5wdXRMZW4pCit7CisgIGdjcnlfbWRfd3JpdGUoKmN0eCwgaW5wdXQsIGlucHV0TGVuKTsKK30KKworc3RhdGljIHZvaWQgTUQ1X0ZpbmFsKHVuc2lnbmVkIGNoYXIgZGlnZXN0WzE2XSwgTUQ1X0NUWCAqIGN0eCkKK3sKKyAgbWVtY3B5KGRpZ2VzdCwgZ2NyeV9tZF9yZWFkKCpjdHgsIDApLCAxNik7CisgIGdjcnlfbWRfY2xvc2UoKmN0eCk7CiB9CiAKICNlbHNlCkBAIC0xOTQsNyArMjA1LDcgQEAKIAogICAvKiBUcmFuc2Zvcm0gYXMgbWFueSB0aW1lcyBhcyBwb3NzaWJsZS4gKi8KICAgaWYoaW5wdXRMZW4gPj0gcGFydExlbikgewotICAgIG1lbWNweSgodm9pZCAqKSZjb250ZXh0LT5idWZmZXJbYnVmaW5kZXhdLCAodm9pZCAqKWlucHV0LCBwYXJ0TGVuKTsKKyAgICBtZW1jcHkoJmNvbnRleHQtPmJ1ZmZlcltidWZpbmRleF0sIGlucHV0LCBwYXJ0TGVuKTsKICAgICBNRDVUcmFuc2Zvcm0oY29udGV4dC0+c3RhdGUsIGNvbnRleHQtPmJ1ZmZlcik7CiAKICAgICBmb3IgKGkgPSBwYXJ0TGVuOyBpICsgNjMgPCBpbnB1dExlbjsgaSArPSA2NCkKQEAgLTIwNiw3ICsyMTcsNyBAQAogICAgIGkgPSAwOwogCiAgIC8qIEJ1ZmZlciByZW1haW5pbmcgaW5wdXQgKi8KLSAgbWVtY3B5KCh2b2lkICopJmNvbnRleHQtPmJ1ZmZlcltidWZpbmRleF0sICh2b2lkICopJmlucHV0W2ldLCBpbnB1dExlbi1pKTsKKyAgbWVtY3B5KCZjb250ZXh0LT5idWZmZXJbYnVmaW5kZXhdLCAmaW5wdXRbaV0sIGlucHV0TGVuLWkpOwogfQogCiAvKiBNRDUgZmluYWxpemF0aW9uLiBFbmRzIGFuIE1ENSBtZXNzYWdlLWRpZ2VzdCBvcGVyYXRpb24sIHdyaXRpbmcgdGhlCkBAIC0zNTgsNiArMzY5LDIwIEBACiAKICNlbmRpZiAvKiBVU0VfU1NMRUFZICovCiAKKyNlbmRpZiAvKiBVU0VfR05VVExTICovCisKK2NvbnN0IEhNQUNfcGFyYW1zIEN1cmxfSE1BQ19NRDVbXSA9IHsKKyAgeworICAgIChITUFDX2hpbml0X2Z1bmMpIE1ENV9Jbml0LCAgICAgICAgICAgLyogSGFzaCBpbml0aWFsaXphdGlvbiBmdW5jdGlvbi4gKi8KKyAgICAoSE1BQ19odXBkYXRlX2Z1bmMpIE1ENV9VcGRhdGUsICAgICAgIC8qIEhhc2ggdXBkYXRlIGZ1bmN0aW9uLiAqLworICAgIChITUFDX2hmaW5hbF9mdW5jKSBNRDVfRmluYWwsICAgICAgICAgLyogSGFzaCBjb21wdXRhdGlvbiBlbmQgZnVuY3Rpb24uICovCisgICAgc2l6ZW9mKE1ENV9DVFgpLCAgICAgICAgICAgICAgICAgICAgICAvKiBTaXplIG9mIGhhc2ggY29udGV4dCBzdHJ1Y3R1cmUuICovCisgICAgNjQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBNYXhpbXVtIGtleSBsZW5ndGguICovCisgICAgMTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBSZXN1bHQgc2l6ZS4gKi8KKyAgfQorfTsKKworCiB2b2lkIEN1cmxfbWQ1aXQodW5zaWduZWQgY2hhciAqb3V0YnVmZmVyLCAvKiAxNiBieXRlcyAqLwogICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmlucHV0KQogewpAQCAtMzY3LDYgKzM5Miw0IEBACiAgIE1ENV9GaW5hbChvdXRidWZmZXIsICZjdHgpOwogfQogCi0jZW5kaWYgLyogVVNFX0dOVVRMUyAqLwotCiAjZW5kaWYgLyogQ1VSTF9ESVNBQkxFX0NSWVBUT19BVVRIICovCmRpZmYgLS1naXQgYS9saWIvbWstY2EtYnVuZGxlLnBsIGIvbGliL21rLWNhLWJ1bmRsZS5wbAppbmRleCA4ZDQ2MWQwLi4zNTg2ZGM0IDEwMDc1NQotLS0gYS9saWIvbWstY2EtYnVuZGxlLnBsCisrKyBiL2xpYi9tay1jYS1idW5kbGUucGwKQEAgLTQwLDcgKzQwLDcgQEAKICMgSWYgdGhlIE9wZW5TU0wgY29tbWFuZGxpbmUgaXMgbm90IGluIHNlYXJjaCBwYXRoIHlvdSBjYW4gY29uZmlndXJlIGl0IGhlcmUhCiBteSAkb3BlbnNzbCA9ICdvcGVuc3NsJzsKIAotbXkgJHZlcnNpb24gPSAkMSBpZiAoJyRSZXZpc2lvbiQnID1+IC9ccyhcZCtcLlxkKylccy8pOworbXkgJHZlcnNpb24gPSAnMS4xNCc7CiAKIGdldG9wdHMoJ2JoaWxucXR1dicpOwogCmRpZmYgLS1naXQgYS9saWIvbWstY2EtYnVuZGxlLnZicyBiL2xpYi9tay1jYS1idW5kbGUudmJzCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjVhNGI0ZWQKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvbWstY2EtYnVuZGxlLnZicwpAQCAtMCwwICsxLDI3MSBAQAorJyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKycqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8NCisnKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfA0KKycqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8DQorJyogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18NCisnKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wNCisnKg0KKycqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuDQorJyoNCisnKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaA0KKycqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMNCisnKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLg0KKycqDQorJyogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsDQorJyogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzDQorJyogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4NCisnKg0KKycqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkNCisnKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLg0KKycqDQorJyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKycqIFNjcmlwdCB0byBmZXRjaCBjZXJ0ZGF0YS50eHQgZnJvbSBNb3ppbGxhLm9yZyBzaXRlIGFuZCBjcmVhdGUgYQ0KKycqIGNhLWJ1bmRsZS5jcnQgZm9yIHVzZSB3aXRoIE9wZW5TU0wgLyBsaWJjdXJsIC8gbGliY3VybCBiaW5kaW5ncw0KKycqIFJlcXVpcmVzIFdpbkh0dHAuV2luSHR0cFJlcXVlc3QuNS4xIGFuZCBBRE9EQi5TdHJlYW0gd2hpY2ggYXJlIHBhcnQgb2YNCisnKiBXMjAwMCBTUDMgb3IgbGF0ZXIsIFdYUCBTUDEgb3IgbGF0ZXIsIFcyMDAzIFNlcnZlciBTUDEgb3IgbGF0ZXIuDQorJyogSGFja2VkIGJ5IEd1ZW50ZXIgS25hdWYNCisnKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorT3B0aW9uIEV4cGxpY2l0DQorQ29uc3QgbXlWZXJzaW9uID0gIjAuMy41Ig0KKw0KK0NvbnN0IG15VXJsID0gImh0dHA6Ly9teHIubW96aWxsYS5vcmcvZmlyZWZveC9zb3VyY2Uvc2VjdXJpdHkvbnNzL2xpYi9ja2Z3L2J1aWx0aW5zL2NlcnRkYXRhLnR4dD9yYXc9MSINCisNCitDb25zdCBteU9wZW5zc2wgPSAib3BlbnNzbC5leGUiDQorDQorQ29uc3QgbXlDZFNhdkYgPSBGQUxTRSAgICAgICAnIEZsYWc6IHNhdmUgZG93bmxvYWRlZCBkYXRhIHRvIGZpbGUgY2VydGRhdGEudHh0DQorQ29uc3QgbXlDYUJha0YgPSBUUlVFICAgICAgICAnIEZsYWc6IGJhY2t1cCBleGlzdGluZyBjYS1idW5kbGUgY2VydGlmaWNhdGUNCitDb25zdCBteUFza0xpRiA9IFRSVUUgICAgICAgICcgRmxhZzogZGlzcGxheSBjZXJ0ZGF0YS50eHQgbGljZW5zZSBhZ3JlZW1lbnQNCitDb25zdCBteUFza1RpRiA9IFRSVUUgICAgICAgICcgRmxhZzogYXNrIHRvIGluY2x1ZGUgY2VydGlmaWNhdGUgdGV4dCBpbmZvDQorDQorJyoqKioqKioqKioqKioqKioqKiogTm90aGluZyB0byBjb25maWd1cmUgYmVsb3chICoqKioqKioqKioqKioqKioqKioNCitEaW0gb2JqU2hlbGwsIG9iak5ldHdvcmssIG9iakZTTywgb2JqSHR0cA0KK0RpbSBteUJhc2UsIG15U2VsZiwgbXlGaCwgbXlUbXBGaCwgbXlDZERhdGEsIG15Q2RGaWxlLCBteUNhRmlsZSwgbXlUbXBOYW1lLCBteUJha051bSwgbXlPcHRUeHQsIGkNCitTZXQgb2JqTmV0d29yayA9IFdTY3JpcHQuQ3JlYXRlT2JqZWN0KCJXU2NyaXB0Lk5ldHdvcmsiKQ0KK1NldCBvYmpTaGVsbCA9IFdTY3JpcHQuQ3JlYXRlT2JqZWN0KCJXU2NyaXB0LlNoZWxsIikNCitTZXQgb2JqRlNPID0gV1NjcmlwdC5DcmVhdGVPYmplY3QoIlNjcmlwdGluZy5GaWxlU3lzdGVtT2JqZWN0IikNCitTZXQgb2JqSHR0cCA9IFdTY3JpcHQuQ3JlYXRlT2JqZWN0KCJXaW5IdHRwLldpbkh0dHBSZXF1ZXN0LjUuMSIpDQorSWYgb2JqSHR0cCBJcyBOb3RoaW5nIFRoZW4gU2V0IG9iakh0dHAgPSBXU2NyaXB0LkNyZWF0ZU9iamVjdCgiV2luSHR0cC5XaW5IdHRwUmVxdWVzdCIpDQorbXlCYXNlID0gTGVmdChXU2NyaXB0LlNjcmlwdEZ1bGxOYW1lLCBJbnN0clJldihXU2NyaXB0LlNjcmlwdEZ1bGxOYW1lLCAiXCIpKQ0KK215U2VsZiA9IExlZnQoV1NjcmlwdC5TY3JpcHROYW1lLCBJbnN0clJldihXU2NyaXB0LlNjcmlwdE5hbWUsICIuIikgLSAxKSAmICIgIiAmIG15VmVyc2lvbg0KK215Q2RGaWxlID0gTWlkKG15VXJsLCBJbnN0clJldihteVVybCwgIi8iKSArIDEsIEluc3RyUmV2KG15VXJsLCAiPyIpIC0gSW5zdHJSZXYobXlVcmwsICIvIikgLSAxKQ0KK215Q2FGaWxlID0gImNhLWJ1bmRsZS5jcnQiDQorbXlUbXBOYW1lID0gSW5wdXRCb3goIkVudGVyIG91dHB1dCBmaWxlbmFtZToiLCBteVNlbGYsIG15Q2FGaWxlKQ0KK0lmIE5vdCAobXlUbXBOYW1lID0gIiIpIFRoZW4NCisgIG15Q2FGaWxlID0gbXlUbXBOYW1lDQorRW5kIElmDQorJyBMZXRzIGlnbm9yZSBTU0wgaW52YWxpZCBjZXJ0IGVycm9ycw0KK29iakh0dHAuT3B0aW9uKDQpID0gMjU2ICsgNTEyICsgNDA5NiArIDgxOTINCitvYmpIdHRwLlNldFRpbWVvdXRzIDAsIDUwMDAsIDEwMDAwLCAxMDAwMA0KK29iakh0dHAuT3BlbiAiR0VUIiwgbXlVcmwsIEZBTFNFDQorb2JqSHR0cC5zZXRSZXF1ZXN0SGVhZGVyICJVc2VyLUFnZW50IiwgV1NjcmlwdC5TY3JpcHROYW1lICYgIi8iICYgbXlWZXJzaW9uDQorb2JqSHR0cC5TZW5kICIiDQorSWYgTm90IChvYmpIdHRwLnN0YXR1c1RleHQgPSAiT0siKSBUaGVuDQorICBNc2dCb3goIkZhaWxlZCB0byBkb3dubG9hZCAnIiAmIG15Q2RGaWxlICYgIic6ICIgJiBvYmpIdHRwLnN0YXR1c1RleHQpLCB2YkNyaXRpY2FsLCBteVNlbGYNCisgIFdTY3JpcHQuUXVpdCAxDQorRW5kIElmDQorJyBDb252ZXJ0IGRhdGEgZnJvbSBSZXNwb25zZUJvZHkgaW5zdGVhZCBvZiB1c2luZyBSZXNwb25zZVRleHQgYmVjYXVzZSBvZiBVVEYtOA0KK215Q2REYXRhID0gQ29udmVydEJpbmFyeURhdGEob2JqSHR0cC5SZXNwb25zZUJvZHkpDQorU2V0IG9iakh0dHAgPSBOb3RoaW5nDQorJyBXcml0ZSByZWNlaXZlZCBkYXRhIHRvIGZpbGUgaWYgZW5hYmxlZA0KK0lmIChteUNkU2F2RiA9IFRSVUUpIFRoZW4NCisgIFNldCBteUZoID0gb2JqRlNPLk9wZW5UZXh0RmlsZShteUNkRmlsZSwgMiwgVFJVRSkNCisgIG15RmguV3JpdGUgbXlDZERhdGENCisgIG15RmguQ2xvc2UNCitFbmQgSWYNCisnIEJhY2t1cCBleGl0c2luZyBjYS1idW5kbGUgY2VydGlmaWNhdGUgZmlsZQ0KK0lmIChteUNhQmFrRiA9IFRSVUUpIFRoZW4NCisgIElmIG9iakZTTy5GaWxlRXhpc3RzKG15Q2FGaWxlKSBUaGVuDQorICAgIERpbSBteUJha0ZpbGUsIGINCisgICAgYiA9IDENCisgICAgbXlCYWtGaWxlID0gbXlDYUZpbGUgJiAiLn4iICYgYiAmICJ+Ig0KKyAgICBXaGlsZSBvYmpGU08uRmlsZUV4aXN0cyhteUJha0ZpbGUpDQorICAgICAgYiA9IGIgKyAxDQorICAgICAgbXlCYWtGaWxlID0gbXlDYUZpbGUgJiAiLn4iICYgYiAmICJ+Ig0KKyAgICBXZW5kDQorICAgIFNldCBteVRtcEZoID0gb2JqRlNPLkdldEZpbGUobXlDYUZpbGUpDQorICAgIG15VG1wRmguTW92ZSBteUJha0ZpbGUNCisgIEVuZCBJZg0KK0VuZCBJZg0KK0lmIChteUFza1RpRiA9IFRSVUUpIFRoZW4NCisgIElmICg2ID0gb2JqU2hlbGwuUG9wVXAoIkRvIHlvdSB3YW50IHRvIGluY2x1ZGUgdGV4dCBpbmZvcm1hdGlvbiBhYm91dCBlYWNoIGNlcnRpZmljYXRlPyIgJiB2YkxmICYgXw0KKyAgICAgICAgICAiKHJlcXVpcmVzIE9wZW5TU0wgY29tbWFuZGxpbmUgaW4gY3VycmVudCBkaXJlY3Rvcnkgb3IgaW4gc2VhcmNoIHBhdGgpIiwsIF8NCisgICAgICAgICAgbXlTZWxmLCB2YlF1ZXN0aW9uICsgdmJZZXNObyArIHZiRGVmYXVsdEJ1dHRvbjIpKSBUaGVuDQorICAgIG15T3B0VHh0ID0gVFJVRQ0KKyAgRWxzZQ0KKyAgICBteU9wdFR4dCA9IEZBTFNFDQorICBFbmQgSWYNCitFbmQgSWYNCisnIFByb2Nlc3MgdGhlIHJlY2VpdmVkIGRhdGENCitEaW0gbXlMaW5lcywgbXlQYXR0ZXJuLCBteUluc2lkZUNlcnQsIG15SW5zaWRlTGljZW5zZSwgbXlMaWNlbnNlVGV4dCwgbXlOdW1DZXJ0cw0KK0RpbSBteUxhYmVsLCBteU9jdGV0cywgbXlEYXRhLCBteVBlbSwgbXlSZXYsIGoNCitteURhdGEgPSAiIg0KK215TGluZXMgPSBTcGxpdChteUNkRGF0YSwgdmJMZiwgLTEpDQorU2V0IG15RmggPSBvYmpGU08uT3BlblRleHRGaWxlKG15Q2FGaWxlLCAyLCBUUlVFKQ0KK215RmguV3JpdGUgIiMjIiAmIHZiTGYNCitteUZoLldyaXRlICIjIyAiICYgbXlDYUZpbGUgJiAiIC0tIEJ1bmRsZSBvZiBDQSBSb290IENlcnRpZmljYXRlcyIgJiB2YkxmDQorbXlGaC5Xcml0ZSAiIyMiICYgdmJMZg0KK215RmguV3JpdGUgIiMjIENvbnZlcnRlZCBhdDogIiAmIE5vdyAmIHZiTGYNCitteUZoLldyaXRlICIjIyIgJiB2YkxmDQorbXlGaC5Xcml0ZSAiIyMgVGhpcyBpcyBhIGJ1bmRsZSBvZiBYLjUwOSBjZXJ0aWZpY2F0ZXMgb2YgcHVibGljIENlcnRpZmljYXRlIEF1dGhvcml0aWVzIiAmIHZiTGYNCitteUZoLldyaXRlICIjIyAoQ0EpLiBUaGVzZSB3ZXJlIGF1dG9tYXRpY2FsbHkgZXh0cmFjdGVkIGZyb20gTW96aWxsYSdzIHJvb3QgY2VydGlmaWNhdGVzIiAmIHZiTGYNCitteUZoLldyaXRlICIjIyBmaWxlIChjZXJ0ZGF0YS50eHQpLiAgVGhpcyBmaWxlIGNhbiBiZSBmb3VuZCBpbiB0aGUgbW96aWxsYSBzb3VyY2UgdHJlZToiICYgdmJMZg0KK215RmguV3JpdGUgIiMjICcvbW96aWxsYS9zZWN1cml0eS9uc3MvbGliL2NrZncvYnVpbHRpbnMvY2VydGRhdGEudHh0JyIgJiB2YkxmDQorbXlGaC5Xcml0ZSAiIyMiICYgdmJMZg0KK215RmguV3JpdGUgIiMjIEl0IGNvbnRhaW5zIHRoZSBjZXJ0aWZpY2F0ZXMgaW4gUEVNIGZvcm1hdCBhbmQgdGhlcmVmb3JlIiAmIHZiTGYNCitteUZoLldyaXRlICIjIyBjYW4gYmUgZGlyZWN0bHkgdXNlZCB3aXRoIGN1cmwgLyBsaWJjdXJsIC8gcGhwX2N1cmwsIG9yIHdpdGgiICYgdmJMZg0KK215RmguV3JpdGUgIiMjIGFuIEFwYWNoZSttb2Rfc3NsIHdlYnNlcnZlciBmb3IgU1NMIGNsaWVudCBhdXRoZW50aWNhdGlvbi4iICYgdmJMZg0KK215RmguV3JpdGUgIiMjIEp1c3QgY29uZmlndXJlIHRoaXMgZmlsZSBhcyB0aGUgU1NMQ0FDZXJ0aWZpY2F0ZUZpbGUuIiAmIHZiTGYNCitteUZoLldyaXRlICIjIyIgJiB2YkxmDQorbXlGaC5Xcml0ZSB2YkxmDQorRm9yIGkgPSAwIFRvIFVCb3VuZChteUxpbmVzKQ0KKyAgSWYgSW5zdHJSZXYobXlMaW5lcyhpKSwgIkNLQV9MQUJFTCAiKSBUaGVuDQorICAgIG15UGF0dGVybiA9ICJeQ0tBX0xBQkVMXHMrW0EtWjAtOV0rXHMrIiIoLis/KSIiIg0KKyAgICBteUxhYmVsID0gUmVnRXhwckZpcnN0KG15UGF0dGVybiwgbXlMaW5lcyhpKSkNCisgIEVuZCBJZg0KKyAgSWYgKG15SW5zaWRlQ2VydCA9IFRSVUUpIFRoZW4NCisgICAgSWYgSW5zdHJSZXYobXlMaW5lcyhpKSwgIkVORCIpIFRoZW4NCisgICAgICBteUluc2lkZUNlcnQgPSBGQUxTRQ0KKyAgICAgIG15RmguV3JpdGUgbXlMYWJlbCAmIHZiTGYNCisgICAgICBteUZoLldyaXRlIFN0cmluZyhMZW4obXlMYWJlbCksICI9IikgJiB2YkxmDQorICAgICAgbXlQZW0gPSAiLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tIiAmIHZiTGYgJiBfDQorICAgICAgICAgICAgICBCYXNlNjRFbmNvZGUobXlEYXRhKSAmIHZiTGYgJiBfDQorICAgICAgICAgICAgICAiLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLSIgJiB2YkxmDQorICAgICAgSWYgKG15T3B0VHh0ID0gRkFMU0UpIFRoZW4NCisgICAgICAgIG15RmguV3JpdGUgbXlQZW0gJiB2YkxmDQorICAgICAgRWxzZQ0KKyAgICAgICAgRGltIG15Q21kLCBteVJ2YWwsIG15VG1wSW4sIG15VG1wT3V0DQorICAgICAgICBteVRtcEluID0gb2JqRlNPLkdldFNwZWNpYWxGb2xkZXIoMikuUGF0aCAmICJcIiAmIG9iakZTTy5HZXRUZW1wTmFtZQ0KKyAgICAgICAgbXlUbXBPdXQgPSBvYmpGU08uR2V0U3BlY2lhbEZvbGRlcigyKS5QYXRoICYgIlwiICYgb2JqRlNPLkdldFRlbXBOYW1lDQorICAgICAgICBTZXQgbXlUbXBGaCA9IG9iakZTTy5PcGVuVGV4dEZpbGUobXlUbXBJbiwgMiwgVFJVRSkNCisgICAgICAgIG15VG1wRmguV3JpdGUgbXlQZW0NCisgICAgICAgIG15VG1wRmguQ2xvc2UNCisgICAgICAgIG15Q21kID0gbXlPcGVuc3NsICYgIiB4NTA5IC1tZDUgLWZpbmdlcnByaW50IC10ZXh0IC1pbmZvcm0gUEVNIiAmIF8NCisgICAgICAgICAgICAgICAgIiAtaW4gIiAmIG15VG1wSW4gJiAiIC1vdXQgIiAmIG15VG1wT3V0DQorICAgICAgICBteVJ2YWwgPSBvYmpTaGVsbC5SdW4gKG15Q21kLCAwLCBUUlVFKQ0KKyAgICAgICAgb2JqRlNPLkRlbGV0ZUZpbGUgbXlUbXBJbiwgVFJVRQ0KKyAgICAgICAgSWYgTm90IChteVJ2YWwgPSAwKSBUaGVuDQorICAgICAgICAgIE1zZ0JveCgiRmFpbGVkIHRvIHByb2Nlc3MgUEVNIGNlcnQgd2l0aCBPcGVuU1NMIGNvbW1hbmRsaW5lISIpLCB2YkNyaXRpY2FsLCBteVNlbGYNCisgICAgICAgICAgb2JqRlNPLkRlbGV0ZUZpbGUgbXlUbXBPdXQsIFRSVUUNCisgICAgICAgICAgV1NjcmlwdC5RdWl0IDMNCisgICAgICAgIEVuZCBJZg0KKyAgICAgICAgU2V0IG15VG1wRmggPSBvYmpGU08uT3BlblRleHRGaWxlKG15VG1wT3V0LCAxKQ0KKyAgICAgICAgbXlGaC5Xcml0ZSBteVRtcEZoLlJlYWRBbGwgJiB2YkxmDQorICAgICAgICBteVRtcEZoLkNsb3NlDQorICAgICAgICBvYmpGU08uRGVsZXRlRmlsZSBteVRtcE91dCwgVFJVRQ0KKyAgICAgIEVuZCBJZg0KKyAgICAgIG15RGF0YSA9ICIiDQorICAgICAgbXlOdW1DZXJ0cyA9IG15TnVtQ2VydHMgKyAxDQorICAgIEVsc2UNCisgICAgICBteU9jdGV0cyA9IFNwbGl0KG15TGluZXMoaSksICJcIikNCisgICAgICBGb3IgaiA9IDEgVG8gVUJvdW5kKG15T2N0ZXRzKQ0KKyAgICAgICAgbXlEYXRhID0gbXlEYXRhICYgQ2hyKENCeXRlKCImbyIgJiBteU9jdGV0cyhqKSkpDQorICAgICAgTmV4dA0KKyAgICBFbmQgSWYNCisgIEVuZCBJZg0KKyAgSWYgSW5zdHJSZXYobXlMaW5lcyhpKSwgIkNWU19JRCAiKSBUaGVuDQorICAgIG15UGF0dGVybiA9ICJeQ1ZTX0lEXHMrIiIoLis/KSIiIg0KKyAgICBteVJldiA9IFJlZ0V4cHJGaXJzdChteVBhdHRlcm4sIG15TGluZXMoaSkpDQorICAgIG15RmguV3JpdGUgIiMgIiAmIG15UmV2ICYgdmJMZiAmIHZiTGYNCisgIEVuZCBJZg0KKyAgSWYgSW5zdHJSZXYobXlMaW5lcyhpKSwgIkNLQV9WQUxVRSBNVUxUSUxJTkVfT0NUQUwiKSBUaGVuDQorICAgIG15SW5zaWRlQ2VydCA9IFRSVUUNCisgIEVuZCBJZg0KKyAgSWYgSW5zdHJSZXYobXlMaW5lcyhpKSwgIioqKioqIEJFR0lOIExJQ0VOU0UgQkxPQ0sgKioqKioiKSBUaGVuDQorICAgIG15SW5zaWRlTGljZW5zZSA9IFRSVUUNCisgIEVuZCBJZg0KKyAgSWYgKG15SW5zaWRlTGljZW5zZSA9IFRSVUUpIFRoZW4NCisgICAgbXlGaC5Xcml0ZSBteUxpbmVzKGkpICYgdmJMZg0KKyAgICBteUxpY2Vuc2VUZXh0ID0gbXlMaWNlbnNlVGV4dCAmIE1pZChteUxpbmVzKGkpLCAyKSAmIHZiTGYNCisgIEVuZCBJZg0KKyAgSWYgSW5zdHJSZXYobXlMaW5lcyhpKSwgIioqKioqIEVORCBMSUNFTlNFIEJMT0NLICoqKioqIikgVGhlbg0KKyAgICBteUluc2lkZUxpY2Vuc2UgPSBGQUxTRQ0KKyAgICBJZiAobXlBc2tMaUYgPSBUUlVFKSBUaGVuDQorICAgICAgSWYgTm90ICg2ID0gb2JqU2hlbGwuUG9wVXAobXlMaWNlbnNlVGV4dCAmIHZiTGYgJiBfDQorICAgICAgICAgICAgICAiRG8geW91IGFncmVlIHRvIHRoZSBsaWNlbnNlIHNob3duIGFib3ZlIChyZXF1aXJlZCB0byBwcm9jZWVkKSA/IiwsIF8NCisgICAgICAgICAgICAgIG15U2VsZiwgdmJRdWVzdGlvbiArIHZiWWVzTm8gKyB2YkRlZmF1bHRCdXR0b24xKSkgVGhlbg0KKyAgICAgICAgbXlGaC5DbG9zZQ0KKyAgICAgICAgb2JqRlNPLkRlbGV0ZUZpbGUgbXlDYUZpbGUsIFRSVUUNCisgICAgICAgIFdTY3JpcHQuUXVpdCAyDQorICAgICAgRW5kIElmDQorICAgIEVuZCBJZg0KKyAgRW5kIElmDQorTmV4dA0KK215RmguQ2xvc2UNCitvYmpTaGVsbC5Qb3BVcCAiRG9uZSAoIiAmIG15TnVtQ2VydHMgJiAiIENBIGNlcnRzIHByb2Nlc3NlZCkuIiwgMjAsIG15U2VsZiwgdmJJbmZvcm1hdGlvbg0KK1dTY3JpcHQuUXVpdCAwDQorDQorRnVuY3Rpb24gQ29udmVydEJpbmFyeURhdGEoYXJyQnl0ZXMpDQorICBEaW0gb2JqU3RyZWFtDQorICBTZXQgb2JqU3RyZWFtID0gQ3JlYXRlT2JqZWN0KCJBRE9EQi5TdHJlYW0iKQ0KKyAgb2JqU3RyZWFtLk9wZW4NCisgIG9ialN0cmVhbS5UeXBlID0gMQ0KKyAgb2JqU3RyZWFtLldyaXRlIGFyckJ5dGVzDQorICBvYmpTdHJlYW0uUG9zaXRpb24gPSAwDQorICBvYmpTdHJlYW0uVHlwZSA9IDINCisgIG9ialN0cmVhbS5DaGFyc2V0ID0gImFzY2lpIg0KKyAgQ29udmVydEJpbmFyeURhdGEgPSBvYmpTdHJlYW0uUmVhZFRleHQNCisgIFNldCBvYmpTdHJlYW0gPSBOb3RoaW5nDQorRW5kIEZ1bmN0aW9uDQorDQorRnVuY3Rpb24gUmVnRXhwckZpcnN0KFNlYXJjaFBhdHRlcm4sIFRoZVN0cmluZykNCisgIERpbSBvYmpSZWdFeHAsIE1hdGNoZXMgICAgICAgICAgICAgICAgICAgICAgICAnIGNyZWF0ZSB2YXJpYWJsZXMuDQorICBTZXQgb2JqUmVnRXhwID0gTmV3IFJlZ0V4cCAgICAgICAgICAgICAgICAgICAgJyBjcmVhdGUgYSByZWd1bGFyIGV4cHJlc3Npb24uDQorICBvYmpSZWdFeHAuUGF0dGVybiA9IFNlYXJjaFBhdHRlcm4gICAgICAgICAgICAgJyBzZXRzIHRoZSBzZWFyY2ggcGF0dGVybi4NCisgIG9ialJlZ0V4cC5JZ25vcmVDYXNlID0gVFJVRSAgICAgICAgICAgICAgICAgICAnIHNldCB0byBpZ25vcmVzIGNhc2UuDQorICBvYmpSZWdFeHAuR2xvYmFsID0gVFJVRSAgICAgICAgICAgICAgICAgICAgICAgJyBzZXQgdG8gZ2xvYWJhbCBzZWFyY2guDQorICBTZXQgTWF0Y2hlcyA9IG9ialJlZ0V4cC5FeGVjdXRlKFRoZVN0cmluZykgICAgJyBkbyB0aGUgc2VhcmNoLg0KKyAgSWYgKE1hdGNoZXMuQ291bnQpIFRoZW4NCisgICAgUmVnRXhwckZpcnN0ID0gTWF0Y2hlcygwKS5TdWJNYXRjaGVzKDApICAgICAnIHJldHVybiBmaXJzdCBtYXRjaC4NCisgIEVsc2UNCisgICAgUmVnRXhwckZpcnN0ID0gIiINCisgIEVuZCBJZg0KKyAgU2V0IG9ialJlZ0V4cCA9IE5vdGhpbmcNCitFbmQgRnVuY3Rpb24NCisNCitGdW5jdGlvbiBCYXNlNjRFbmNvZGUoaW5EYXRhKQ0KKyAgQ29uc3QgQmFzZTY0ID0gIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky8iDQorICBEaW0gY091dCwgc091dCwgSQ0KKw0KKyAgJ0ZvciBlYWNoIGdyb3VwIG9mIDMgYnl0ZXMNCisgIEZvciBJID0gMSBUbyBMZW4oaW5EYXRhKSBTdGVwIDMNCisgICAgRGltIG5Hcm91cCwgcE91dCwgc0dyb3VwDQorDQorICAgICdDcmVhdGUgb25lIGxvbmcgZnJvbSB0aGlzIDMgYnl0ZXMuDQorICAgIG5Hcm91cCA9ICZIMTAwMDAgKiBBc2MoTWlkKGluRGF0YSwgSSwgMSkpICsgXw0KKyAgICAgICAgICAgICAmSDEwMCAqIE15QVNDKE1pZChpbkRhdGEsIEkgKyAxLCAxKSkgKyBfDQorICAgICAgICAgICAgIE15QVNDKE1pZChpbkRhdGEsIEkgKyAyLCAxKSkNCisNCisgICAgJ09jdCBzcGxpdHMgdGhlIGxvbmcgVG8gOCBncm91cHMgd2l0aCAzIGJpdHMNCisgICAgbkdyb3VwID0gT2N0KG5Hcm91cCkNCisNCisgICAgJ0FkZCBsZWFkaW5nIHplcm9zDQorICAgIG5Hcm91cCA9IFN0cmluZyg4IC0gTGVuKG5Hcm91cCksICIwIikgJiBuR3JvdXANCisNCisgICAgJ0NvbnZlcnQgVG8gYmFzZTY0DQorICAgIHBPdXQgPSBNaWQoQmFzZTY0LCBDTG5nKCImbyIgJiBNaWQobkdyb3VwLCAxLCAyKSkgKyAxLCAxKSAmIF8NCisgICAgICAgICAgIE1pZChCYXNlNjQsIENMbmcoIiZvIiAmIE1pZChuR3JvdXAsIDMsIDIpKSArIDEsIDEpICYgXw0KKyAgICAgICAgICAgTWlkKEJhc2U2NCwgQ0xuZygiJm8iICYgTWlkKG5Hcm91cCwgNSwgMikpICsgMSwgMSkgJiBfDQorICAgICAgICAgICBNaWQoQmFzZTY0LCBDTG5nKCImbyIgJiBNaWQobkdyb3VwLCA3LCAyKSkgKyAxLCAxKQ0KKw0KKyAgICAnQWRkIHRoZSBwYXJ0IFRvIE91dFB1dCBzdHJpbmcNCisgICAgc091dCA9IHNPdXQgKyBwT3V0DQorDQorICAgICdBZGQgYSBuZXcgbGluZSBGb3IgRWFjaCA3NiBjaGFycyBJbiBkZXN0ICg3NiozLzQgPSA1NykNCisgICAgSWYgKEkgPCBMZW4oaW5EYXRhKSAtIDIpIFRoZW4NCisgICAgICBJZiAoSSArIDIpIE1vZCA1NyA9IDAgVGhlbiBzT3V0ID0gc091dCAmIHZiTGYNCisgICAgRW5kIElmDQorICBOZXh0DQorICBTZWxlY3QgQ2FzZSBMZW4oaW5EYXRhKSBNb2QgMw0KKyAgICBDYXNlIDE6ICc4IGJpdCBmaW5hbA0KKyAgICAgIHNPdXQgPSBMZWZ0KHNPdXQsIExlbihzT3V0KSAtIDIpICYgIj09Ig0KKyAgICBDYXNlIDI6ICcxNiBiaXQgZmluYWwNCisgICAgICBzT3V0ID0gTGVmdChzT3V0LCBMZW4oc091dCkgLSAxKSAmICI9Ig0KKyAgRW5kIFNlbGVjdA0KKyAgQmFzZTY0RW5jb2RlID0gc091dA0KK0VuZCBGdW5jdGlvbg0KKw0KK0Z1bmN0aW9uIE15QVNDKE9uZUNoYXIpDQorICBJZiBPbmVDaGFyID0gIiIgVGhlbiBNeUFTQyA9IDAgRWxzZSBNeUFTQyA9IEFzYyhPbmVDaGFyKQ0KK0VuZCBGdW5jdGlvbg0KKw0KKw0KZGlmZiAtLWdpdCBhL2xpYi9tcHJpbnRmLmMgYi9saWIvbXByaW50Zi5jCmluZGV4IDFkOTNjNTguLjUzNmMwYzIgMTAwNjQ0Ci0tLSBhL2xpYi9tcHJpbnRmLmMKKysrIGIvbGliL21wcmludGYuYwpAQCAtOTYzLDcgKzk2Myw2IEBACiAgICAgICAgICAgLyogUkVDVVJTSVZFIFVTQUdFICovCiAgICAgICAgICAgbGVuID0gY3VybF9tc25wcmludGYoZnB0ciwgbGVmdCwgIi4lbGQiLCBwcmVjKTsKICAgICAgICAgICBmcHRyICs9IGxlbjsKLSAgICAgICAgICBsZWZ0IC09IGxlbjsKICAgICAgICAgfQogICAgICAgICBpZihwLT5mbGFncyAmIEZMQUdTX0xPTkcpCiAgICAgICAgICAgKmZwdHIrKyA9ICdsJzsKZGlmZiAtLWdpdCBhL2xpYi9tdWx0aS5jIGIvbGliL211bHRpLmMKaW5kZXggNDc2Y2I4MS4uODc1ZTEzNiAxMDA2NDQKLS0tIGEvbGliL211bHRpLmMKKysrIGIvbGliL211bHRpLmMKQEAgLTYxLDcgKzYxLDYgQEAKIHN0cnVjdCBDdXJsX21lc3NhZ2UgewogICAvKiB0aGUgJ0NVUkxNc2cnIGlzIHRoZSBwYXJ0IHRoYXQgaXMgdmlzaWJsZSB0byB0aGUgZXh0ZXJuYWwgdXNlciAqLwogICBzdHJ1Y3QgQ1VSTE1zZyBleHRtc2c7Ci0gIHN0cnVjdCBDdXJsX21lc3NhZ2UgKm5leHQ7CiB9OwogCiAvKiBOT1RFOiBpZiB5b3UgYWRkIGEgc3RhdGUgaGVyZSwgYWRkIHRoZSBuYW1lIHRvIHRoZSBzdGF0ZW5hbWVbXSBhcnJheSBhcwpAQCAtODQsNyArODMsNyBAQAogICBDVVJMTV9TVEFURV9UT09GQVNULCAgICAgLyogd2FpdCBiZWNhdXNlIGxpbWl0LXJhdGUgZXhjZWVkZWQgKi8KICAgQ1VSTE1fU1RBVEVfRE9ORSwgICAgICAgIC8qIHBvc3QgZGF0YSB0cmFuc2ZlciBvcGVyYXRpb24gKi8KICAgQ1VSTE1fU1RBVEVfQ09NUExFVEVELCAgIC8qIG9wZXJhdGlvbiBjb21wbGV0ZSAqLwotCisgIENVUkxNX1NUQVRFX01TR1NFTlQsICAgICAvKiB0aGUgb3BlcmF0aW9uIGNvbXBsZXRlIG1lc3NhZ2UgaXMgc2VudCAqLwogICBDVVJMTV9TVEFURV9MQVNUIC8qIG5vdCBhIHRydWUgc3RhdGUsIG5ldmVyIHVzZSB0aGlzICovCiB9IENVUkxNc3RhdGU7CiAKQEAgLTExMCwxMiArMTA5LDcgQEAKICAgQ1VSTE1zdGF0ZSBzdGF0ZTsgIC8qIHRoZSBoYW5kbGUncyBzdGF0ZSAqLwogICBDVVJMY29kZSByZXN1bHQ7ICAgLyogcHJldmlvdXMgcmVzdWx0ICovCiAKLSAgc3RydWN0IEN1cmxfbWVzc2FnZSAqbXNnOyAvKiBBIHBvaW50ZXIgdG8gb25lIHNpbmdsZSBwb3N0ZWQgbWVzc2FnZS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDbGVhbnVwIHNob3VsZCBiZSBkb25lIG9uIHRoaXMgcG9pbnRlciBOT1Qgb24KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgbGlua2VkIGxpc3QgaW4gQ3VybF9tdWx0aS4gIFRoaXMgbWVzc2FnZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbGwgYmUgZGVsZXRlZCB3aGVuIHRoaXMgaGFuZGxlIGlzIHJlbW92ZWQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tIHRoZSBtdWx0aS1oYW5kbGUgKi8KLSAgaW50IG1zZ19udW07IC8qIG51bWJlciBvZiBtZXNzYWdlcyBsZWZ0IGluICdtc2cnIHRvIHJldHVybiAqLworICBzdHJ1Y3QgQ3VybF9tZXNzYWdlIG1zZzsgLyogQSBzaW5nbGUgcG9zdGVkIG1lc3NhZ2UuICovCiAKICAgLyogQXJyYXkgd2l0aCB0aGUgcGxhaW4gc29ja2V0IG51bWJlcnMgdGhpcyBoYW5kbGUgdGFrZXMgY2FyZSBvZiwgaW4gbm8KICAgICAgcGFydGljdWxhciBvcmRlci4gTm90ZSB0aGF0IGFsbCBzb2NrZXRzIGFyZSBhZGRlZCB0byB0aGUgc29ja2hhc2gsIHdoZXJlCkBAIC0xNDIsMTAgKzEzNiwxMSBAQAogICBzdHJ1Y3QgQ3VybF9vbmVfZWFzeSBlYXN5OwogCiAgIGludCBudW1fZWFzeTsgLyogYW1vdW50IG9mIGVudHJpZXMgaW4gdGhlIGxpbmtlZCBsaXN0IGFib3ZlLiAqLwotICBpbnQgbnVtX21zZ3M7IC8qIGFtb3VudCBvZiBtZXNzYWdlcyBpbiB0aGUgZWFzeSBoYW5kbGVzICovCiAgIGludCBudW1fYWxpdmU7IC8qIGFtb3VudCBvZiBlYXN5IGhhbmRsZXMgdGhhdCBhcmUgYWRkZWQgYnV0IGhhdmUgbm90IHlldAogICAgICAgICAgICAgICAgICAgICByZWFjaGVkIENPTVBMRVRFIHN0YXRlICovCiAKKyAgc3RydWN0IGN1cmxfbGxpc3QgKm1zZ2xpc3Q7IC8qIGEgbGlzdCBvZiBtZXNzYWdlcyBmcm9tIGNvbXBsZXRlZCB0cmFuc2ZlcnMgKi8KKwogICAvKiBjYWxsYmFjayBmdW5jdGlvbiBhbmQgdXNlciBkYXRhIHBvaW50ZXIgZm9yIHRoZSAqc29ja2V0KCkgQVBJICovCiAgIGN1cmxfc29ja2V0X2NhbGxiYWNrIHNvY2tldF9jYjsKICAgdm9pZCAqc29ja2V0X3VzZXJwOwpAQCAtMTk3LDYgKzE5Miw5IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pOwogc3RhdGljIGJvb2wgaXNIYW5kbGVBdEhlYWQoc3RydWN0IFNlc3Npb25IYW5kbGUgKmhhbmRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjdXJsX2xsaXN0ICpwaXBlbGluZSk7CitzdGF0aWMgQ1VSTE1jb2RlIGFkZF9uZXh0X3RpbWVvdXQoc3RydWN0IHRpbWV2YWwgbm93LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBDdXJsX211bHRpICptdWx0aSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgU2Vzc2lvbkhhbmRsZSAqZCk7CiAKICNpZmRlZiBERUJVR0JVSUxECiBzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHN0YXRlbmFtZVtdPXsKQEAgLTIxNiw5ICsyMTQsMTIgQEAKICAgIlRPT0ZBU1QiLAogICAiRE9ORSIsCiAgICJDT01QTEVURUQiLAorICAiTVNHU0VOVCIsCiB9OwogI2VuZGlmCiAKK3N0YXRpYyB2b2lkIG11bHRpX2ZyZWV0aW1lb3V0KHZvaWQgKmEsIHZvaWQgKmIpOworCiAvKiBhbHdheXMgdXNlIHRoaXMgZnVuY3Rpb24gdG8gY2hhbmdlIHN0YXRlLCB0byBtYWtlIGRlYnVnZ2luZyBlYXNpZXIgKi8KIHN0YXRpYyB2b2lkIG11bHRpc3RhdGUoc3RydWN0IEN1cmxfb25lX2Vhc3kgKmVhc3ksIENVUkxNc3RhdGUgc3RhdGUpCiB7CkBAIC0zNjAsNiArMzYxLDMzIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgc2hfZnJlZWVudHJ5KTsKIH0KIAorLyoKKyAqIG11bHRpX2FkZG1zZygpCisgKgorICogQ2FsbGVkIHdoZW4gYSB0cmFuc2ZlciBpcyBjb21wbGV0ZWQuIEFkZHMgdGhlIGdpdmVuIG1zZyBwb2ludGVyIHRvCisgKiB0aGUgbGlzdCBrZXB0IGluIHRoZSBtdWx0aSBoYW5kbGUuCisgKi8KK3N0YXRpYyBDVVJMTWNvZGUgbXVsdGlfYWRkbXNnKHN0cnVjdCBDdXJsX211bHRpICptdWx0aSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBDdXJsX21lc3NhZ2UgKm1zZykKK3sKKyAgaWYoIUN1cmxfbGxpc3RfaW5zZXJ0X25leHQobXVsdGktPm1zZ2xpc3QsIG11bHRpLT5tc2dsaXN0LT50YWlsLCBtc2cpKQorICAgIHJldHVybiBDVVJMTV9PVVRfT0ZfTUVNT1JZOworCisgIHJldHVybiBDVVJMTV9PSzsKK30KKworLyoKKyAqIG11bHRpX2ZyZWVhbXNnKCkKKyAqCisgKiBDYWxsYmFjayB1c2VkIGJ5IHRoZSBsbGlzdCBzeXN0ZW0gd2hlbiBhIHNpbmdsZSBsaXN0IGVudHJ5IGlzIGRlc3Ryb3llZC4KKyAqLworc3RhdGljIHZvaWQgbXVsdGlfZnJlZWFtc2codm9pZCAqYSwgdm9pZCAqYikKK3sKKyAgKHZvaWQpYTsKKyAgKHZvaWQpYjsKK30KKworCiBDVVJMTSAqY3VybF9tdWx0aV9pbml0KHZvaWQpCiB7CiAgIHN0cnVjdCBDdXJsX211bHRpICptdWx0aSA9IGNhbGxvYygxLCBzaXplb2Yoc3RydWN0IEN1cmxfbXVsdGkpKTsKQEAgLTM3MCwyNyArMzk4LDIwIEBACiAgIG11bHRpLT50eXBlID0gQ1VSTF9NVUxUSV9IQU5ETEU7CiAKICAgbXVsdGktPmhvc3RjYWNoZSA9IEN1cmxfbWtfZG5zY2FjaGUoKTsKLSAgaWYoIW11bHRpLT5ob3N0Y2FjaGUpIHsKLSAgICAvKiBmYWlsdXJlLCBmcmVlIG1lbSBhbmQgYmFpbCBvdXQgKi8KLSAgICBmcmVlKG11bHRpKTsKLSAgICByZXR1cm4gTlVMTDsKLSAgfQorICBpZighbXVsdGktPmhvc3RjYWNoZSkKKyAgICBnb3RvIGVycm9yOwogCiAgIG11bHRpLT5zb2NraGFzaCA9IHNoX2luaXQoKTsKLSAgaWYoIW11bHRpLT5zb2NraGFzaCkgewotICAgIC8qIGZhaWx1cmUsIGZyZWUgbWVtIGFuZCBiYWlsIG91dCAqLwotICAgIEN1cmxfaGFzaF9kZXN0cm95KG11bHRpLT5ob3N0Y2FjaGUpOwotICAgIGZyZWUobXVsdGkpOwotICAgIHJldHVybiBOVUxMOwotICB9CisgIGlmKCFtdWx0aS0+c29ja2hhc2gpCisgICAgZ290byBlcnJvcjsKIAogICBtdWx0aS0+Y29ubmMgPSBDdXJsX21rX2Nvbm5jKENPTk5DQUNIRV9NVUxUSSwgLTFMKTsKLSAgaWYoIW11bHRpLT5jb25uYykgewotICAgIEN1cmxfaGFzaF9kZXN0cm95KG11bHRpLT5zb2NraGFzaCk7Ci0gICAgQ3VybF9oYXNoX2Rlc3Ryb3kobXVsdGktPmhvc3RjYWNoZSk7Ci0gICAgZnJlZShtdWx0aSk7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KKyAgaWYoIW11bHRpLT5jb25uYykKKyAgICBnb3RvIGVycm9yOworCisgIG11bHRpLT5tc2dsaXN0ID0gQ3VybF9sbGlzdF9hbGxvYyhtdWx0aV9mcmVlYW1zZyk7CisgIGlmKCFtdWx0aS0+bXNnbGlzdCkKKyAgICBnb3RvIGVycm9yOwogCiAgIC8qIExldCdzIG1ha2UgdGhlIGRvdWJseS1saW5rZWQgbGlzdCBhIGNpcmN1bGFyIGxpc3QuICBUaGlzIG1ha2VzCiAgICAgIHRoZSBsaW5rZWQgbGlzdCBjb2RlIHNpbXBsZXIgYW5kIGFsbG93cyBpbnNlcnRpbmcgYXQgdGhlIGVuZApAQCAtMzk5LDYgKzQyMCwxNyBAQAogICBtdWx0aS0+ZWFzeS5wcmV2ID0gJm11bHRpLT5lYXN5OwogCiAgIHJldHVybiAoQ1VSTE0gKikgbXVsdGk7CisKKyAgZXJyb3I6CisgIGlmKG11bHRpLT5zb2NraGFzaCkKKyAgICBDdXJsX2hhc2hfZGVzdHJveShtdWx0aS0+c29ja2hhc2gpOworICBpZihtdWx0aS0+aG9zdGNhY2hlKQorICAgIEN1cmxfaGFzaF9kZXN0cm95KG11bHRpLT5ob3N0Y2FjaGUpOworICBpZihtdWx0aS0+Y29ubmMpCisgICAgQ3VybF9ybV9jb25uYyhtdWx0aS0+Y29ubmMpOworCisgIGZyZWUobXVsdGkpOworICByZXR1cm4gTlVMTDsKIH0KIAogQ1VSTE1jb2RlIGN1cmxfbXVsdGlfYWRkX2hhbmRsZShDVVJMTSAqbXVsdGlfaGFuZGxlLApAQCAtNDA4LDYgKzQ0MCw3IEBACiAgIHN0cnVjdCBDdXJsX29uZV9lYXN5ICplYXN5OwogICBzdHJ1Y3QgY2xvc3VyZSAqY2w7CiAgIHN0cnVjdCBjbG9zdXJlICpwcmV2PU5VTEw7CisgIHN0cnVjdCBTZXNzaW9uSGFuZGxlICpkYXRhID0gZWFzeV9oYW5kbGU7CiAKICAgLyogRmlyc3QsIG1ha2Ugc29tZSBiYXNpYyBjaGVja3MgdGhhdCB0aGUgQ1VSTE0gaGFuZGxlIGlzIGEgZ29vZCBoYW5kbGUgKi8KICAgaWYoIUdPT0RfTVVMVElfSEFORExFKG11bHRpKSkKQEAgLTQyMiw2ICs0NTUsMTAgQEAKICAgICAvKiBwb3NzaWJseSB3ZSBzaG91bGQgY3JlYXRlIGEgbmV3IHVuaXF1ZSBlcnJvciBjb2RlIGZvciB0aGlzIGNvbmRpdGlvbiAqLwogICAgIHJldHVybiBDVVJMTV9CQURfRUFTWV9IQU5ETEU7CiAKKyAgZGF0YS0+c3RhdGUudGltZW91dGxpc3QgPSBDdXJsX2xsaXN0X2FsbG9jKG11bHRpX2ZyZWV0aW1lb3V0KTsKKyAgaWYoIWRhdGEtPnN0YXRlLnRpbWVvdXRsaXN0KQorICAgIHJldHVybiBDVVJMTV9PVVRfT0ZfTUVNT1JZOworCiAgIC8qIE5vdywgdGltZSB0byBhZGQgYW4gZWFzeSBoYW5kbGUgdG8gdGhlIG11bHRpIHN0YWNrICovCiAgIGVhc3kgPSBjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCBDdXJsX29uZV9lYXN5KSk7CiAgIGlmKCFlYXN5KQpAQCAtNTc1LDYgKzYxMiw3IEBACiB7CiAgIHN0cnVjdCBDdXJsX211bHRpICptdWx0aT0oc3RydWN0IEN1cmxfbXVsdGkgKiltdWx0aV9oYW5kbGU7CiAgIHN0cnVjdCBDdXJsX29uZV9lYXN5ICplYXN5OworICBzdHJ1Y3QgU2Vzc2lvbkhhbmRsZSAqZGF0YSA9IGN1cmxfaGFuZGxlOwogCiAgIC8qIEZpcnN0LCBtYWtlIHNvbWUgYmFzaWMgY2hlY2tzIHRoYXQgdGhlIENVUkxNIGhhbmRsZSBpcyBhIGdvb2QgaGFuZGxlICovCiAgIGlmKCFHT09EX01VTFRJX0hBTkRMRShtdWx0aSkpCkBAIC01ODUsMTAgKzYyMywxMCBAQAogICAgIHJldHVybiBDVVJMTV9CQURfRUFTWV9IQU5ETEU7CiAKICAgLyogcGljay11cCBmcm9tIHRoZSAnY3VybF9oYW5kbGUnIHRoZSBrZXB0IHBvc2l0aW9uIGluIHRoZSBsaXN0ICovCi0gIGVhc3kgPSAoKHN0cnVjdCBTZXNzaW9uSGFuZGxlICopY3VybF9oYW5kbGUpLT5tdWx0aV9wb3M7CisgIGVhc3kgPSBkYXRhLT5tdWx0aV9wb3M7CiAKICAgaWYoZWFzeSkgewotICAgIGJvb2wgcHJlbWF0dXJlID0gKGJvb2wpKGVhc3ktPnN0YXRlICE9IENVUkxNX1NUQVRFX0NPTVBMRVRFRCk7CisgICAgYm9vbCBwcmVtYXR1cmUgPSAoYm9vbCkoZWFzeS0+c3RhdGUgPCBDVVJMTV9TVEFURV9DT01QTEVURUQpOwogICAgIGJvb2wgZWFzeV9vd25zX2Nvbm4gPSAoYm9vbCkoZWFzeS0+ZWFzeV9jb25uICYmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZWFzeS0+ZWFzeV9jb25uLT5kYXRhID09IGVhc3ktPmVhc3lfaGFuZGxlKSk7CiAKQEAgLTYxOCw2ICs2NTYsMTIgQEAKICAgICAgICBjdXJsX2Vhc3lfY2xlYW51cCBpcyBjYWxsZWQuICovCiAgICAgQ3VybF9leHBpcmUoZWFzeS0+ZWFzeV9oYW5kbGUsIDApOwogCisgICAgLyogZGVzdHJveSB0aGUgdGltZW91dCBsaXN0IHRoYXQgaXMgaGVsZCBpbiB0aGUgZWFzeSBoYW5kbGUgKi8KKyAgICBpZihkYXRhLT5zdGF0ZS50aW1lb3V0bGlzdCkgeworICAgICAgQ3VybF9sbGlzdF9kZXN0cm95KGRhdGEtPnN0YXRlLnRpbWVvdXRsaXN0LCBOVUxMKTsKKyAgICAgIGRhdGEtPnN0YXRlLnRpbWVvdXRsaXN0ID0gTlVMTDsKKyAgICB9CisKICAgICBpZihlYXN5LT5lYXN5X2hhbmRsZS0+ZG5zLmhvc3RjYWNoZXR5cGUgPT0gSENBQ0hFX01VTFRJKSB7CiAgICAgICAvKiBjbGVhciBvdXQgdGhlIHVzYWdlIG9mIHRoZSBzaGFyZWQgRE5TIGNhY2hlICovCiAgICAgICBlYXN5LT5lYXN5X2hhbmRsZS0+ZG5zLmhvc3RjYWNoZSA9IE5VTEw7CkBAIC02NTYsNiArNzAwLDEwIEBACiAgICAgICAgICB0byB0aGF0IHNpbmNlIHdlJ3JlIG5vdCBwYXJ0IG9mIHRoYXQgaGFuZGxlIGFueW1vcmUgKi8KICAgICAgIGVhc3ktPmVhc3lfaGFuZGxlLT5zdGF0ZS5jb25uYyA9IE5VTEw7CiAKKyAgICAgIC8qIFNpbmNlIHdlIHJldHVybiB0aGUgY29ubmVjdGlvbiBiYWNrIHRvIHRoZSBjb21tdW5hbCBjb25uZWN0aW9uIHBvb2wKKyAgICAgICAgIHdlIG1hcmsgdGhlIGxhc3QgY29ubmVjdGlvbiBhcyBpbmFjY2Vzc2libGUgKi8KKyAgICAgIGVhc3ktPmVhc3lfaGFuZGxlLT5zdGF0ZS5sYXN0Y29ubmVjdCA9IC0xOworCiAgICAgICAvKiBNb2RpZnkgdGhlIGNvbm5lY3RpbmRleCBzaW5jZSB0aGlzIGhhbmRsZSBjYW4ndCBwb2ludCB0byB0aGUKICAgICAgICAgIGNvbm5lY3Rpb24gY2FjaGUgYW55bW9yZS4KIApAQCAtNjc5LDYgKzcyNywyMiBAQAogICAgIEN1cmxfZWFzeV9hZGRtdWx0aShlYXN5LT5lYXN5X2hhbmRsZSwgTlVMTCk7IC8qIGNsZWFyIHRoZSBhc3NvY2lhdGlvbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIHRoaXMgbXVsdGkgaGFuZGxlICovCiAKKyAgICB7CisgICAgICAvKiBtYWtlIHN1cmUgdGhlcmUncyBubyBwZW5kaW5nIG1lc3NhZ2UgaW4gdGhlIHF1ZXVlIHNlbnQgZnJvbSB0aGlzIGVhc3kKKyAgICAgICAgIGhhbmRsZSAqLworICAgICAgc3RydWN0IGN1cmxfbGxpc3RfZWxlbWVudCAqZTsKKworICAgICAgZm9yKGUgPSBtdWx0aS0+bXNnbGlzdC0+aGVhZDsgZTsgZSA9IGUtPm5leHQpIHsKKyAgICAgICAgc3RydWN0IEN1cmxfbWVzc2FnZSAqbXNnID0gZS0+cHRyOworCisgICAgICAgIGlmKG1zZy0+ZXh0bXNnLmVhc3lfaGFuZGxlID09IGVhc3ktPmVhc3lfaGFuZGxlKSB7CisgICAgICAgICAgQ3VybF9sbGlzdF9yZW1vdmUobXVsdGktPm1zZ2xpc3QsIGUsIE5VTEwpOworICAgICAgICAgIC8qIHRoZXJlIGNhbiBvbmx5IGJlIG9uZSBmcm9tIHRoaXMgc3BlY2lmaWMgaGFuZGxlICovCisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisKICAgICAvKiBtYWtlIHRoZSBwcmV2aW91cyBub2RlIHBvaW50IHRvIG91ciBuZXh0ICovCiAgICAgaWYoZWFzeS0+cHJldikKICAgICAgIGVhc3ktPnByZXYtPm5leHQgPSBlYXN5LT5uZXh0OwpAQCAtNjkzLDggKzc1Nyw2IEBACiAKICAgICAvKiBOT1RFIE5PVEUgTk9URQogICAgICAgIFdlIGRvIG5vdCB0b3VjaCB0aGUgZWFzeSBoYW5kbGUgaGVyZSEgKi8KLSAgICBpZihlYXN5LT5tc2cpCi0gICAgICBmcmVlKGVhc3ktPm1zZyk7CiAgICAgZnJlZShlYXN5KTsKIAogICAgIG11bHRpLT5udW1fZWFzeS0tOyAvKiBvbmUgbGVzcyB0byBjYXJlIGFib3V0IG5vdyAqLwpAQCAtNzc5LDYgKzg0MSw3IEBACiAgICAgICAgICB0byBiZSBwcmVzZW50ICovCiAgIGNhc2UgQ1VSTE1fU1RBVEVfVE9PRkFTVDogIC8qIHJldHVybnMgMCwgc28gd2lsbCBub3Qgc2VsZWN0LiAqLwogICBjYXNlIENVUkxNX1NUQVRFX0NPTVBMRVRFRDoKKyAgY2FzZSBDVVJMTV9TVEFURV9NU0dTRU5UOgogICBjYXNlIENVUkxNX1NUQVRFX0lOSVQ6CiAgIGNhc2UgQ1VSTE1fU1RBVEVfQ09OTkVDVDoKICAgY2FzZSBDVVJMTV9TVEFURV9XQUlURE86CkBAIC04NjYsNiArOTI5LDcgQEAKIH0KIAogc3RhdGljIENVUkxNY29kZSBtdWx0aV9ydW5zaW5nbGUoc3RydWN0IEN1cmxfbXVsdGkgKm11bHRpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHRpbWV2YWwgbm93LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IEN1cmxfb25lX2Vhc3kgKmVhc3kpCiB7CiAgIHN0cnVjdCBDdXJsX21lc3NhZ2UgKm1zZyA9IE5VTEw7CkBAIC04NzYsMTAgKzk0MCwxNCBAQAogICBib29sIGRvbmUgPSBGQUxTRTsKICAgQ1VSTE1jb2RlIHJlc3VsdCA9IENVUkxNX09LOwogICBzdHJ1Y3QgU2luZ2xlUmVxdWVzdCAqazsKKyAgc3RydWN0IFNlc3Npb25IYW5kbGUgKmRhdGE7CisgIGxvbmcgdGltZW91dF9tczsKIAogICBpZighR09PRF9FQVNZX0hBTkRMRShlYXN5LT5lYXN5X2hhbmRsZSkpCiAgICAgcmV0dXJuIENVUkxNX0JBRF9FQVNZX0hBTkRMRTsKIAorICBkYXRhID0gZWFzeS0+ZWFzeV9oYW5kbGU7CisKICAgZG8gewogICAgIC8qIHRoaXMgaXMgYSBkby13aGlsZSBsb29wIGp1c3QgdG8gYWxsb3cgYSBicmVhayB0byBza2lwIHRvIHRoZSBlbmQKICAgICAgICBvZiBpdCAqLwpAQCAtODg3LDE4ICs5NTUsMTggQEAKIAogICAgIC8qIEhhbmRsZSB0aGUgY2FzZSB3aGVuIHRoZSBwaXBlIGJyZWFrcywgaS5lLiwgdGhlIGNvbm5lY3Rpb24KICAgICAgICB3ZSdyZSB1c2luZyBnZXRzIGNsZWFuZWQgdXAgYW5kIHdlJ3JlIGxlZnQgd2l0aCBub3RoaW5nLiAqLwotICAgIGlmKGVhc3ktPmVhc3lfaGFuZGxlLT5zdGF0ZS5waXBlX2Jyb2tlKSB7Ci0gICAgICBpbmZvZihlYXN5LT5lYXN5X2hhbmRsZSwgIlBpcGUgYnJva2U6IGhhbmRsZSAweCVwLCB1cmwgPSAlc1xuIiwKLSAgICAgICAgICAgIGVhc3ksIGVhc3ktPmVhc3lfaGFuZGxlLT5zdGF0ZS5wYXRoKTsKKyAgICBpZihkYXRhLT5zdGF0ZS5waXBlX2Jyb2tlKSB7CisgICAgICBpbmZvZihkYXRhLCAiUGlwZSBicm9rZTogaGFuZGxlIDB4JXAsIHVybCA9ICVzXG4iLAorICAgICAgICAgICAgZWFzeSwgZGF0YS0+c3RhdGUucGF0aCk7CiAKLSAgICAgIGlmKGVhc3ktPnN0YXRlICE9IENVUkxNX1NUQVRFX0NPTVBMRVRFRCkgeworICAgICAgaWYoZWFzeS0+c3RhdGUgPCBDVVJMTV9TVEFURV9DT01QTEVURUQpIHsKICAgICAgICAgLyogSGVhZCBiYWNrIHRvIHRoZSBDT05ORUNUIHN0YXRlICovCiAgICAgICAgIG11bHRpc3RhdGUoZWFzeSwgQ1VSTE1fU1RBVEVfQ09OTkVDVCk7CiAgICAgICAgIHJlc3VsdCA9IENVUkxNX0NBTExfTVVMVElfUEVSRk9STTsKICAgICAgICAgZWFzeS0+cmVzdWx0ID0gQ1VSTEVfT0s7CiAgICAgICB9CiAKLSAgICAgIGVhc3ktPmVhc3lfaGFuZGxlLT5zdGF0ZS5waXBlX2Jyb2tlID0gRkFMU0U7CisgICAgICBkYXRhLT5zdGF0ZS5waXBlX2Jyb2tlID0gRkFMU0U7CiAgICAgICBlYXN5LT5lYXN5X2Nvbm4gPSBOVUxMOwogICAgICAgYnJlYWs7CiAgICAgfQpAQCAtOTA2LDMxICs5NzQsNTkgQEAKICAgICBpZihlYXN5LT5lYXN5X2Nvbm4gJiYgZWFzeS0+c3RhdGUgPiBDVVJMTV9TVEFURV9DT05ORUNUICYmCiAgICAgICAgZWFzeS0+c3RhdGUgPCBDVVJMTV9TVEFURV9DT01QTEVURUQpCiAgICAgICAvKiBNYWtlIHN1cmUgd2Ugc2V0IHRoZSBjb25uZWN0aW9uJ3MgY3VycmVudCBvd25lciAqLwotICAgICAgZWFzeS0+ZWFzeV9jb25uLT5kYXRhID0gZWFzeS0+ZWFzeV9oYW5kbGU7CisgICAgICBlYXN5LT5lYXN5X2Nvbm4tPmRhdGEgPSBkYXRhOworCisgICAgaWYoZWFzeS0+ZWFzeV9jb25uICYmIChlYXN5LT5zdGF0ZSA+PSBDVVJMTV9TVEFURV9DT05ORUNUKSkgeworICAgICAgLyogd2UgbmVlZCB0byB3YWl0IGZvciB0aGUgY29ubmVjdCBzdGF0ZSBhcyBvbmx5IHRoZW4gaXMgdGhlCisgICAgICAgICBzdGFydCB0aW1lIHN0b3JlZCAqLworCisgICAgICB0aW1lb3V0X21zID0gQ3VybF90aW1lbGVmdChlYXN5LT5lYXN5X2Nvbm4sICZub3csCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlYXN5LT5zdGF0ZSA8PSBDVVJMTV9TVEFURV9XQUlURE8pOworCisgICAgICBpZih0aW1lb3V0X21zIDwgMCkgeworICAgICAgICAvKiBIYW5kbGUgdGltZWQgb3V0ICovCisgICAgICAgIGlmKGVhc3ktPnN0YXRlID09IENVUkxNX1NUQVRFX1dBSVRSRVNPTFZFKQorICAgICAgICAgIGZhaWxmKGRhdGEsICJSZXNvbHZpbmcgdGltZWQgb3V0IGFmdGVyICVsZCBtaWxsaXNlY29uZHMiLAorICAgICAgICAgICAgICAgIEN1cmxfdHZkaWZmKG5vdywgZGF0YS0+cHJvZ3Jlc3MudF9zdGFydHNpbmdsZSkpOworICAgICAgICBlbHNlIGlmKGVhc3ktPnN0YXRlID09IENVUkxNX1NUQVRFX1dBSVRDT05ORUNUKQorICAgICAgICAgIGZhaWxmKGRhdGEsICJDb25uZWN0aW9uIHRpbWVkIG91dCBhZnRlciAlbGQgbWlsbGlzZWNvbmRzIiwKKyAgICAgICAgICAgICAgICBDdXJsX3R2ZGlmZihub3csIGRhdGEtPnByb2dyZXNzLnRfc3RhcnRzaW5nbGUpKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgayA9ICZkYXRhLT5yZXE7CisgICAgICAgICAgZmFpbGYoZGF0YSwgIk9wZXJhdGlvbiB0aW1lZCBvdXQgYWZ0ZXIgJWxkIG1pbGxpc2Vjb25kcyB3aXRoICUiCisgICAgICAgICAgICAgICAgRk9STUFUX09GRl9UICIgb3V0IG9mICUiIEZPUk1BVF9PRkZfVCAiIGJ5dGVzIHJlY2VpdmVkIiwKKyAgICAgICAgICAgICAgICBDdXJsX3R2ZGlmZihub3csIGRhdGEtPnByb2dyZXNzLnRfc3RhcnRzaW5nbGUpLCBrLT5ieXRlY291bnQsCisgICAgICAgICAgICAgICAgay0+c2l6ZSk7CisgICAgICAgIH0KKyAgICAgICAgZWFzeS0+cmVzdWx0ID0gQ1VSTEVfT1BFUkFUSU9OX1RJTUVET1VUOworICAgICAgICBtdWx0aXN0YXRlKGVhc3ksIENVUkxNX1NUQVRFX0NPTVBMRVRFRCk7CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgIH0KIAogICAgIHN3aXRjaChlYXN5LT5zdGF0ZSkgewogICAgIGNhc2UgQ1VSTE1fU1RBVEVfSU5JVDoKICAgICAgIC8qIGluaXQgdGhpcyB0cmFuc2Zlci4gKi8KLSAgICAgIGVhc3ktPnJlc3VsdD1DdXJsX3ByZXRyYW5zZmVyKGVhc3ktPmVhc3lfaGFuZGxlKTsKKyAgICAgIGVhc3ktPnJlc3VsdD1DdXJsX3ByZXRyYW5zZmVyKGRhdGEpOwogCiAgICAgICBpZihDVVJMRV9PSyA9PSBlYXN5LT5yZXN1bHQpIHsKICAgICAgICAgLyogYWZ0ZXIgaW5pdCwgZ28gQ09OTkVDVCAqLwogICAgICAgICBtdWx0aXN0YXRlKGVhc3ksIENVUkxNX1NUQVRFX0NPTk5FQ1QpOwogICAgICAgICByZXN1bHQgPSBDVVJMTV9DQUxMX01VTFRJX1BFUkZPUk07CiAKLSAgICAgICAgZWFzeS0+ZWFzeV9oYW5kbGUtPnN0YXRlLnVzZWRfaW50ZXJmYWNlID0gQ3VybF9pZl9tdWx0aTsKKyAgICAgICAgZGF0YS0+c3RhdGUudXNlZF9pbnRlcmZhY2UgPSBDdXJsX2lmX211bHRpOwogICAgICAgfQogICAgICAgYnJlYWs7CiAKICAgICBjYXNlIENVUkxNX1NUQVRFX0NPTk5FQ1Q6CiAgICAgICAvKiBDb25uZWN0LiBXZSBnZXQgYSBjb25uZWN0aW9uIGlkZW50aWZpZXIgZmlsbGVkIGluLiAqLwotICAgICAgQ3VybF9wZ3JzVGltZShlYXN5LT5lYXN5X2hhbmRsZSwgVElNRVJfU1RBUlRTSU5HTEUpOwotICAgICAgZWFzeS0+cmVzdWx0ID0gQ3VybF9jb25uZWN0KGVhc3ktPmVhc3lfaGFuZGxlLCAmZWFzeS0+ZWFzeV9jb25uLAorICAgICAgQ3VybF9wZ3JzVGltZShkYXRhLCBUSU1FUl9TVEFSVFNJTkdMRSk7CisgICAgICBlYXN5LT5yZXN1bHQgPSBDdXJsX2Nvbm5lY3QoZGF0YSwgJmVhc3ktPmVhc3lfY29ubiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYXN5bmMsICZwcm90b2NvbF9jb25uZWN0KTsKIAogICAgICAgaWYoQ1VSTEVfT0sgPT0gZWFzeS0+cmVzdWx0KSB7CiAgICAgICAgIC8qIEFkZCB0aGlzIGhhbmRsZSB0byB0aGUgc2VuZCBvciBwZW5kIHBpcGVsaW5lICovCi0gICAgICAgIGVhc3ktPnJlc3VsdCA9IGFkZEhhbmRsZVRvU2VuZE9yUGVuZFBpcGVsaW5lKGVhc3ktPmVhc3lfaGFuZGxlLAorICAgICAgICBlYXN5LT5yZXN1bHQgPSBhZGRIYW5kbGVUb1NlbmRPclBlbmRQaXBlbGluZShkYXRhLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlYXN5LT5lYXN5X2Nvbm4pOwogICAgICAgICBpZihDVVJMRV9PSyA9PSBlYXN5LT5yZXN1bHQpIHsKICAgICAgICAgICBpZihhc3luYykKQEAgLTEwMTMsOSArMTEwOSw5IEBACiAKICAgICAgIGlmKGVhc3ktPmVhc3lfY29ubi0+Yml0cy5wcm94eV9jb25uZWN0X2Nsb3NlZCkgewogICAgICAgICAvKiByZXNldCB0aGUgZXJyb3IgYnVmZmVyICovCi0gICAgICAgIGlmKGVhc3ktPmVhc3lfaGFuZGxlLT5zZXQuZXJyb3JidWZmZXIpCi0gICAgICAgICAgZWFzeS0+ZWFzeV9oYW5kbGUtPnNldC5lcnJvcmJ1ZmZlclswXSA9ICdcMCc7Ci0gICAgICAgIGVhc3ktPmVhc3lfaGFuZGxlLT5zdGF0ZS5lcnJvcmJ1ZiA9IEZBTFNFOworICAgICAgICBpZihkYXRhLT5zZXQuZXJyb3JidWZmZXIpCisgICAgICAgICAgZGF0YS0+c2V0LmVycm9yYnVmZmVyWzBdID0gJ1wwJzsKKyAgICAgICAgZGF0YS0+c3RhdGUuZXJyb3JidWYgPSBGQUxTRTsKIAogICAgICAgICBlYXN5LT5yZXN1bHQgPSBDVVJMRV9PSzsKICAgICAgICAgcmVzdWx0ID0gQ1VSTE1fQ0FMTF9NVUxUSV9QRVJGT1JNOwpAQCAtMTA4Nyw3ICsxMTgzLDcgQEAKICAgICAgIH0KICAgICAgIGVsc2UgaWYoZWFzeS0+cmVzdWx0KSB7CiAgICAgICAgIC8qIGZhaWx1cmUgZGV0ZWN0ZWQgKi8KLSAgICAgICAgQ3VybF9wb3N0dHJhbnNmZXIoZWFzeS0+ZWFzeV9oYW5kbGUpOworICAgICAgICBDdXJsX3Bvc3R0cmFuc2ZlcihkYXRhKTsKICAgICAgICAgQ3VybF9kb25lKCZlYXN5LT5lYXN5X2Nvbm4sIGVhc3ktPnJlc3VsdCwgRkFMU0UpOwogICAgICAgICBkaXNjb25uZWN0X2Nvbm4gPSBUUlVFOwogICAgICAgfQpAQCAtMTA5NiwxNSArMTE5MiwxNSBAQAogICAgIGNhc2UgQ1VSTE1fU1RBVEVfV0FJVERPOgogICAgICAgLyogV2FpdCBmb3Igb3VyIHR1cm4gdG8gRE8gd2hlbiB3ZSdyZSBwaXBlbGluaW5nIHJlcXVlc3RzICovCiAjaWZkZWYgREVCVUdCVUlMRAotICAgICAgaW5mb2YoZWFzeS0+ZWFzeV9oYW5kbGUsICJDb25uICVsZCBzZW5kIHBpcGUgJXp1IGludXNlICVkIGF0aGVhZCAlZFxuIiwKKyAgICAgIGluZm9mKGRhdGEsICJDb25uICVsZCBzZW5kIHBpcGUgJXp1IGludXNlICVkIGF0aGVhZCAlZFxuIiwKICAgICAgICAgICAgIGVhc3ktPmVhc3lfY29ubi0+Y29ubmVjdGluZGV4LAogICAgICAgICAgICAgZWFzeS0+ZWFzeV9jb25uLT5zZW5kX3BpcGUtPnNpemUsCiAgICAgICAgICAgICBlYXN5LT5lYXN5X2Nvbm4tPndyaXRlY2hhbm5lbF9pbnVzZT8xOjAsCi0gICAgICAgICAgICBpc0hhbmRsZUF0SGVhZChlYXN5LT5lYXN5X2hhbmRsZSwKKyAgICAgICAgICAgIGlzSGFuZGxlQXRIZWFkKGRhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlYXN5LT5lYXN5X2Nvbm4tPnNlbmRfcGlwZSk/MTowKTsKICNlbmRpZgogICAgICAgaWYoIWVhc3ktPmVhc3lfY29ubi0+d3JpdGVjaGFubmVsX2ludXNlICYmCi0gICAgICAgICBpc0hhbmRsZUF0SGVhZChlYXN5LT5lYXN5X2hhbmRsZSwKKyAgICAgICAgIGlzSGFuZGxlQXRIZWFkKGRhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgICBlYXN5LT5lYXN5X2Nvbm4tPnNlbmRfcGlwZSkpIHsKICAgICAgICAgLyogR3JhYiB0aGUgY2hhbm5lbCAqLwogICAgICAgICBlYXN5LT5lYXN5X2Nvbm4tPndyaXRlY2hhbm5lbF9pbnVzZSA9IFRSVUU7CkBAIC0xMTE0LDcgKzEyMTAsNyBAQAogICAgICAgYnJlYWs7CiAKICAgICBjYXNlIENVUkxNX1NUQVRFX0RPOgotICAgICAgaWYoZWFzeS0+ZWFzeV9oYW5kbGUtPnNldC5jb25uZWN0X29ubHkpIHsKKyAgICAgIGlmKGRhdGEtPnNldC5jb25uZWN0X29ubHkpIHsKICAgICAgICAgLyoga2VlcCBjb25uZWN0aW9uIG9wZW4gZm9yIGFwcGxpY2F0aW9uIHRvIHVzZSB0aGUgc29ja2V0ICovCiAgICAgICAgIGVhc3ktPmVhc3lfY29ubi0+Yml0cy5jbG9zZSA9IEZBTFNFOwogICAgICAgICBtdWx0aXN0YXRlKGVhc3ksIENVUkxNX1NUQVRFX0RPTkUpOwpAQCAtMTEyOCw2ICsxMjI0LDE3IEBACiAKICAgICAgICAgaWYoQ1VSTEVfT0sgPT0gZWFzeS0+cmVzdWx0KSB7CiAgICAgICAgICAgaWYoIWRvcGhhc2VfZG9uZSkgeworICAgICAgICAgICAgLyogc29tZSBzdGVwcyBuZWVkZWQgZm9yIHdpbGRjYXJkIG1hdGNoaW5nICovCisgICAgICAgICAgICBpZihkYXRhLT5zZXQud2lsZGNhcmRtYXRjaCkgeworICAgICAgICAgICAgICBzdHJ1Y3QgV2lsZGNhcmREYXRhICp3YyA9ICZkYXRhLT53aWxkY2FyZDsKKyAgICAgICAgICAgICAgaWYod2MtPnN0YXRlID09IENVUkxXQ19ET05FIHx8IHdjLT5zdGF0ZSA9PSBDVVJMV0NfU0tJUCkgeworICAgICAgICAgICAgICAgIC8qIHNraXAgc29tZSBzdGF0ZXMgaWYgaXQgaXMgaW1wb3J0YW50ICovCisgICAgICAgICAgICAgICAgQ3VybF9kb25lKCZlYXN5LT5lYXN5X2Nvbm4sIENVUkxFX09LLCBGQUxTRSk7CisgICAgICAgICAgICAgICAgbXVsdGlzdGF0ZShlYXN5LCBDVVJMTV9TVEFURV9ET05FKTsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBDVVJMTV9DQUxMX01VTFRJX1BFUkZPUk07CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIC8qIERPIHdhcyBub3QgY29tcGxldGVkIGluIG9uZSBmdW5jdGlvbiBjYWxsLCB3ZSBtdXN0IGNvbnRpbnVlCiAgICAgICAgICAgICAgICBET0lORy4uLiAqLwogICAgICAgICAgICAgbXVsdGlzdGF0ZShlYXN5LCBDVVJMTV9TVEFURV9ET0lORyk7CkBAIC0xMTY4LDcgKzEyNzUsNyBAQAogICAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHJldHJ5ID0gKGJvb2wpKG5ld3VybD9UUlVFOkZBTFNFKTsKIAotICAgICAgICAgIEN1cmxfcG9zdHRyYW5zZmVyKGVhc3ktPmVhc3lfaGFuZGxlKTsKKyAgICAgICAgICBDdXJsX3Bvc3R0cmFuc2ZlcihkYXRhKTsKICAgICAgICAgICBkcmMgPSBDdXJsX2RvbmUoJmVhc3ktPmVhc3lfY29ubiwgZWFzeS0+cmVzdWx0LCBGQUxTRSk7CiAKICAgICAgICAgICAvKiBXaGVuIHNldCB0byByZXRyeSB0aGUgY29ubmVjdGlvbiwgd2UgbXVzdCB0byBnbyBiYWNrIHRvCkBAIC0xMTc2LDcgKzEyODMsNyBAQAogICAgICAgICAgIGlmKHJldHJ5KSB7CiAgICAgICAgICAgICBpZiAoKGRyYyA9PSBDVVJMRV9PSykgfHwgKGRyYyA9PSBDVVJMRV9TRU5EX0VSUk9SKSkgewogICAgICAgICAgICAgICBmb2xsb3cgPSBGT0xMT1dfUkVUUlk7Ci0gICAgICAgICAgICAgIGRyYyA9IEN1cmxfZm9sbG93KGVhc3ktPmVhc3lfaGFuZGxlLCBuZXd1cmwsIGZvbGxvdyk7CisgICAgICAgICAgICAgIGRyYyA9IEN1cmxfZm9sbG93KGRhdGEsIG5ld3VybCwgZm9sbG93KTsKICAgICAgICAgICAgICAgaWYoZHJjID09IENVUkxFX09LKSB7CiAgICAgICAgICAgICAgICAgbXVsdGlzdGF0ZShlYXN5LCBDVVJMTV9TVEFURV9DT05ORUNUKTsKICAgICAgICAgICAgICAgICByZXN1bHQgPSBDVVJMTV9DQUxMX01VTFRJX1BFUkZPUk07CkBAIC0xMjAxLDcgKzEzMDgsNyBAQAogICAgICAgICB9CiAgICAgICAgIGVsc2UgewogICAgICAgICAgIC8qIGZhaWx1cmUgZGV0ZWN0ZWQgKi8KLSAgICAgICAgICBDdXJsX3Bvc3R0cmFuc2ZlcihlYXN5LT5lYXN5X2hhbmRsZSk7CisgICAgICAgICAgQ3VybF9wb3N0dHJhbnNmZXIoZGF0YSk7CiAgICAgICAgICAgQ3VybF9kb25lKCZlYXN5LT5lYXN5X2Nvbm4sIGVhc3ktPnJlc3VsdCwgRkFMU0UpOwogICAgICAgICAgIGRpc2Nvbm5lY3RfY29ubiA9IFRSVUU7CiAgICAgICAgIH0KQEAgLTEyMzAsNyArMTMzNyw3IEBACiAgICAgICB9CiAgICAgICBlbHNlIHsKICAgICAgICAgLyogZmFpbHVyZSBkZXRlY3RlZCAqLwotICAgICAgICBDdXJsX3Bvc3R0cmFuc2ZlcihlYXN5LT5lYXN5X2hhbmRsZSk7CisgICAgICAgIEN1cmxfcG9zdHRyYW5zZmVyKGRhdGEpOwogICAgICAgICBDdXJsX2RvbmUoJmVhc3ktPmVhc3lfY29ubiwgZWFzeS0+cmVzdWx0LCBGQUxTRSk7CiAgICAgICAgIGRpc2Nvbm5lY3RfY29ubiA9IFRSVUU7CiAgICAgICB9CkBAIC0xMjU2LDcgKzEzNjMsNyBAQAogICAgICAgICB9CiAgICAgICAgIGVsc2UgewogICAgICAgICAgIC8qIGZhaWx1cmUgZGV0ZWN0ZWQgKi8KLSAgICAgICAgICBDdXJsX3Bvc3R0cmFuc2ZlcihlYXN5LT5lYXN5X2hhbmRsZSk7CisgICAgICAgICAgQ3VybF9wb3N0dHJhbnNmZXIoZGF0YSk7CiAgICAgICAgICAgQ3VybF9kb25lKCZlYXN5LT5lYXN5X2Nvbm4sIGVhc3ktPnJlc3VsdCwgRkFMU0UpOwogICAgICAgICAgIGRpc2Nvbm5lY3RfY29ubiA9IFRSVUU7CiAgICAgICAgIH0KQEAgLTEyNjUsNyArMTM3Miw3IEBACiAKICAgICBjYXNlIENVUkxNX1NUQVRFX0RPX0RPTkU6CiAgICAgICAvKiBNb3ZlIG91cnNlbHZlcyBmcm9tIHRoZSBzZW5kIHRvIHJlY3YgcGlwZWxpbmUgKi8KLSAgICAgIG1vdmVIYW5kbGVGcm9tU2VuZFRvUmVjdlBpcGVsaW5lKGVhc3ktPmVhc3lfaGFuZGxlLCBlYXN5LT5lYXN5X2Nvbm4pOworICAgICAgbW92ZUhhbmRsZUZyb21TZW5kVG9SZWN2UGlwZWxpbmUoZGF0YSwgZWFzeS0+ZWFzeV9jb25uKTsKICAgICAgIC8qIENoZWNrIGlmIHdlIGNhbiBtb3ZlIHBlbmRpbmcgcmVxdWVzdHMgdG8gc2VuZCBwaXBlICovCiAgICAgICBjaGVja1BlbmRQaXBlbGluZShlYXN5LT5lYXN5X2Nvbm4pOwogICAgICAgbXVsdGlzdGF0ZShlYXN5LCBDVVJMTV9TVEFURV9XQUlUUEVSRk9STSk7CkBAIC0xMjc1LDcgKzEzODIsNyBAQAogICAgIGNhc2UgQ1VSTE1fU1RBVEVfV0FJVFBFUkZPUk06CiAgICAgICAvKiBXYWl0IGZvciBvdXIgdHVybiB0byBQRVJGT1JNICovCiAgICAgICBpZighZWFzeS0+ZWFzeV9jb25uLT5yZWFkY2hhbm5lbF9pbnVzZSAmJgotICAgICAgICAgaXNIYW5kbGVBdEhlYWQoZWFzeS0+ZWFzeV9oYW5kbGUsCisgICAgICAgICBpc0hhbmRsZUF0SGVhZChkYXRhLAogICAgICAgICAgICAgICAgICAgICAgICAgZWFzeS0+ZWFzeV9jb25uLT5yZWN2X3BpcGUpKSB7CiAgICAgICAgIC8qIEdyYWIgdGhlIGNoYW5uZWwgKi8KICAgICAgICAgZWFzeS0+ZWFzeV9jb25uLT5yZWFkY2hhbm5lbF9pbnVzZSA9IFRSVUU7CkBAIC0xMjg0LDExICsxMzkxLDExIEBACiAgICAgICB9CiAjaWZkZWYgREVCVUdCVUlMRAogICAgICAgZWxzZSB7Ci0gICAgICAgIGluZm9mKGVhc3ktPmVhc3lfaGFuZGxlLCAiQ29ubiAlbGQgcmVjdiBwaXBlICV6dSBpbnVzZSAlZCBhdGhlYWQgJWRcbiIsCisgICAgICAgIGluZm9mKGRhdGEsICJDb25uICVsZCByZWN2IHBpcGUgJXp1IGludXNlICVkIGF0aGVhZCAlZFxuIiwKICAgICAgICAgICAgICAgZWFzeS0+ZWFzeV9jb25uLT5jb25uZWN0aW5kZXgsCiAgICAgICAgICAgICAgIGVhc3ktPmVhc3lfY29ubi0+cmVjdl9waXBlLT5zaXplLAogICAgICAgICAgICAgICBlYXN5LT5lYXN5X2Nvbm4tPnJlYWRjaGFubmVsX2ludXNlPzE6MCwKLSAgICAgICAgICAgICAgaXNIYW5kbGVBdEhlYWQoZWFzeS0+ZWFzeV9oYW5kbGUsCisgICAgICAgICAgICAgIGlzSGFuZGxlQXRIZWFkKGRhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVhc3ktPmVhc3lfY29ubi0+cmVjdl9waXBlKT8xOjApOwogICAgICAgfQogI2VuZGlmCkBAIC0xMjk2LDM3ICsxNDAzLDUwIEBACiAKICAgICBjYXNlIENVUkxNX1NUQVRFX1RPT0ZBU1Q6IC8qIGxpbWl0LXJhdGUgZXhjZWVkZWQgaW4gZWl0aGVyIGRpcmVjdGlvbiAqLwogICAgICAgLyogaWYgYm90aCByYXRlcyBhcmUgd2l0aGluIHNwZWMsIHJlc3VtZSB0cmFuc2ZlciAqLwotICAgICAgQ3VybF9wZ3JzVXBkYXRlKGVhc3ktPmVhc3lfY29ubik7Ci0gICAgICBpZiggKCAoIGVhc3ktPmVhc3lfaGFuZGxlLT5zZXQubWF4X3NlbmRfc3BlZWQgPT0gMCApIHx8Ci0gICAgICAgICAgICAoIGVhc3ktPmVhc3lfaGFuZGxlLT5wcm9ncmVzcy51bHNwZWVkIDwKLSAgICAgICAgICAgICAgZWFzeS0+ZWFzeV9oYW5kbGUtPnNldC5tYXhfc2VuZF9zcGVlZCApICkgICYmCi0gICAgICAgICAgKCAoIGVhc3ktPmVhc3lfaGFuZGxlLT5zZXQubWF4X3JlY3Zfc3BlZWQgPT0gMCApIHx8Ci0gICAgICAgICAgICAoIGVhc3ktPmVhc3lfaGFuZGxlLT5wcm9ncmVzcy5kbHNwZWVkIDwKLSAgICAgICAgICAgICAgZWFzeS0+ZWFzeV9oYW5kbGUtPnNldC5tYXhfcmVjdl9zcGVlZCApICkKLSAgICAgICAgKQorICAgICAgaWYoICggKGRhdGEtPnNldC5tYXhfc2VuZF9zcGVlZCA9PSAwKSB8fAorICAgICAgICAgICAgKGRhdGEtPnByb2dyZXNzLnVsc3BlZWQgPCBkYXRhLT5zZXQubWF4X3NlbmRfc3BlZWQgKSkgICYmCisgICAgICAgICAgKCAoZGF0YS0+c2V0Lm1heF9yZWN2X3NwZWVkID09IDApIHx8CisgICAgICAgICAgICAoZGF0YS0+cHJvZ3Jlc3MuZGxzcGVlZCA8IGRhdGEtPnNldC5tYXhfcmVjdl9zcGVlZCkgKSApCiAgICAgICAgIG11bHRpc3RhdGUoZWFzeSwgQ1VSTE1fU1RBVEVfUEVSRk9STSk7CiAgICAgICBicmVhazsKIAogICAgIGNhc2UgQ1VSTE1fU1RBVEVfUEVSRk9STToKLSAgICAgIC8qIGNoZWNrIGlmIG92ZXIgc3BlZWQgKi8KLSAgICAgIGlmKCAoICAoIGVhc3ktPmVhc3lfaGFuZGxlLT5zZXQubWF4X3NlbmRfc3BlZWQgPiAwICkgJiYKLSAgICAgICAgICAgICAoIGVhc3ktPmVhc3lfaGFuZGxlLT5wcm9ncmVzcy51bHNwZWVkID4KLSAgICAgICAgICAgICAgIGVhc3ktPmVhc3lfaGFuZGxlLT5zZXQubWF4X3NlbmRfc3BlZWQgKSApICB8fAotICAgICAgICAgICggICggZWFzeS0+ZWFzeV9oYW5kbGUtPnNldC5tYXhfcmVjdl9zcGVlZCA+IDAgKSAmJgotICAgICAgICAgICAgICggZWFzeS0+ZWFzeV9oYW5kbGUtPnByb2dyZXNzLmRsc3BlZWQgPgotICAgICAgICAgICAgICAgZWFzeS0+ZWFzeV9oYW5kbGUtPnNldC5tYXhfcmVjdl9zcGVlZCApICkKLSAgICAgICAgKSB7Ci0gICAgICAgIC8qIFRyYW5zZmVyIGlzIG92ZXIgdGhlIHNwZWVkIGxpbWl0LiBDaGFuZ2Ugc3RhdGUuICBUT0RPOiBDYWxsCi0gICAgICAgICAqIEN1cmxfZXhwaXJlKCkgd2l0aCB0aGUgdGltZSBsZWZ0IHVudGlsIHdlJ3JlIHRhcmdldGVkIHRvIGJlIGJlbG93Ci0gICAgICAgICAqIHRoZSBzcGVlZCBsaW1pdCBhZ2Fpbi4gKi8KLSAgICAgICAgbXVsdGlzdGF0ZShlYXN5LCBDVVJMTV9TVEFURV9UT09GQVNUICk7CisgICAgICAvKiBjaGVjayBpZiBvdmVyIHNlbmQgc3BlZWQgKi8KKyAgICAgIGlmKCAoZGF0YS0+c2V0Lm1heF9zZW5kX3NwZWVkID4gMCkgJiYKKyAgICAgICAgICAoZGF0YS0+cHJvZ3Jlc3MudWxzcGVlZCA+IGRhdGEtPnNldC5tYXhfc2VuZF9zcGVlZCkgKSB7CisgICAgICAgIGludCBidWZmZXJzaXplOworCisgICAgICAgIG11bHRpc3RhdGUoZWFzeSwgQ1VSTE1fU1RBVEVfVE9PRkFTVCk7CisKKyAgICAgICAgLyogY2FsY3VsYXRlIHVwbG9hZCByYXRlLWxpbWl0YXRpb24gdGltZW91dC4gKi8KKyAgICAgICAgYnVmZmVyc2l6ZSA9IChpbnQpKGRhdGEtPnNldC5idWZmZXJfc2l6ZSA/CisgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLT5zZXQuYnVmZmVyX3NpemUgOiBCVUZTSVpFKTsKKyAgICAgICAgdGltZW91dF9tcyA9IEN1cmxfc2xlZXBfdGltZShkYXRhLT5zZXQubWF4X3NlbmRfc3BlZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS0+cHJvZ3Jlc3MudWxzcGVlZCwgYnVmZmVyc2l6ZSk7CisgICAgICAgIEN1cmxfZXhwaXJlKGRhdGEsIHRpbWVvdXRfbXMpOworICAgICAgICBicmVhazsKKyAgICAgIH0KKworICAgICAgLyogY2hlY2sgaWYgb3ZlciByZWN2IHNwZWVkICovCisgICAgICBpZiggKGRhdGEtPnNldC5tYXhfcmVjdl9zcGVlZCA+IDApICYmCisgICAgICAgICAgKGRhdGEtPnByb2dyZXNzLmRsc3BlZWQgPiBkYXRhLT5zZXQubWF4X3JlY3Zfc3BlZWQpICkgeworICAgICAgICBpbnQgYnVmZmVyc2l6ZTsKKworICAgICAgICBtdWx0aXN0YXRlKGVhc3ksIENVUkxNX1NUQVRFX1RPT0ZBU1QpOworCisgICAgICAgICAvKiBDYWxjdWxhdGUgZG93bmxvYWQgcmF0ZS1saW1pdGF0aW9uIHRpbWVvdXQuICovCisgICAgICAgIGJ1ZmZlcnNpemUgPSAoaW50KShkYXRhLT5zZXQuYnVmZmVyX3NpemUgPworICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS0+c2V0LmJ1ZmZlcl9zaXplIDogQlVGU0laRSk7CisgICAgICAgIHRpbWVvdXRfbXMgPSBDdXJsX3NsZWVwX3RpbWUoZGF0YS0+c2V0Lm1heF9yZWN2X3NwZWVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtPnByb2dyZXNzLmRsc3BlZWQsIGJ1ZmZlcnNpemUpOworICAgICAgICBDdXJsX2V4cGlyZShkYXRhLCB0aW1lb3V0X21zKTsKICAgICAgICAgYnJlYWs7CiAgICAgICB9CiAKICAgICAgIC8qIHJlYWQvd3JpdGUgZGF0YSBpZiBpdCBpcyByZWFkeSB0byBkbyBzbyAqLwogICAgICAgZWFzeS0+cmVzdWx0ID0gQ3VybF9yZWFkd3JpdGUoZWFzeS0+ZWFzeV9jb25uLCAmZG9uZSk7CiAKLSAgICAgIGsgPSAmZWFzeS0+ZWFzeV9oYW5kbGUtPnJlcTsKKyAgICAgIGsgPSAmZGF0YS0+cmVxOwogCiAgICAgICBpZighKGstPmtlZXBvbiAmIEtFRVBfUkVDVikpIHsKICAgICAgICAgLyogV2UncmUgZG9uZSByZWNlaXZpbmcgKi8KQEAgLTEzMzgsNyArMTQ1OCw3IEBACiAgICAgICAgIGVhc3ktPmVhc3lfY29ubi0+d3JpdGVjaGFubmVsX2ludXNlID0gRkFMU0U7CiAgICAgICB9CiAKLSAgICAgIGlmKGVhc3ktPnJlc3VsdCkgIHsKKyAgICAgIGlmKGVhc3ktPnJlc3VsdCkgewogICAgICAgICAvKiBUaGUgdHJhbnNmZXIgcGhhc2UgcmV0dXJuZWQgZXJyb3IsIHdlIG1hcmsgdGhlIGNvbm5lY3Rpb24gdG8gZ2V0CiAgICAgICAgICAqIGNsb3NlZCB0byBwcmV2ZW50IGJlaW5nIHJlLXVzZWQuIFRoaXMgaXMgYmVjYXVzZSB3ZSBjYW4ndCBwb3NzaWJseQogICAgICAgICAgKiBrbm93IGlmIHRoZSBjb25uZWN0aW9uIGlzIGluIGEgZ29vZCBzaGFwZSBvciBub3Qgbm93LiAgVW5sZXNzIGl0IGlzCkBAIC0xMzQ4LDcgKzE0NjgsNyBAQAogICAgICAgICBpZighKGVhc3ktPmVhc3lfY29ubi0+cHJvdG9jb2wgJiBQUk9UX0RVQUxDSEFOTkVMKSkKICAgICAgICAgICBlYXN5LT5lYXN5X2Nvbm4tPmJpdHMuY2xvc2UgPSBUUlVFOwogCi0gICAgICAgIEN1cmxfcG9zdHRyYW5zZmVyKGVhc3ktPmVhc3lfaGFuZGxlKTsKKyAgICAgICAgQ3VybF9wb3N0dHJhbnNmZXIoZGF0YSk7CiAgICAgICAgIEN1cmxfZG9uZSgmZWFzeS0+ZWFzeV9jb25uLCBlYXN5LT5yZXN1bHQsIEZBTFNFKTsKICAgICAgIH0KICAgICAgIGVsc2UgaWYoVFJVRSA9PSBkb25lKSB7CkBAIC0xMzYxLDEwICsxNDgxLDEwIEBACiAgICAgICAgICAgcmV0cnkgPSAoYm9vbCkobmV3dXJsP1RSVUU6RkFMU0UpOwogCiAgICAgICAgIC8qIGNhbGwgdGhpcyBldmVuIGlmIHRoZSByZWFkd3JpdGUgZnVuY3Rpb24gcmV0dXJuZWQgZXJyb3IgKi8KLSAgICAgICAgQ3VybF9wb3N0dHJhbnNmZXIoZWFzeS0+ZWFzeV9oYW5kbGUpOworICAgICAgICBDdXJsX3Bvc3R0cmFuc2ZlcihkYXRhKTsKIAogICAgICAgICAvKiB3ZSdyZSBubyBsb25nZXIgcmVjZXZpbmcgKi8KLSAgICAgICAgbW92ZUhhbmRsZUZyb21SZWN2VG9Eb25lUGlwZWxpbmUoZWFzeS0+ZWFzeV9oYW5kbGUsCisgICAgICAgIG1vdmVIYW5kbGVGcm9tUmVjdlRvRG9uZVBpcGVsaW5lKGRhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVhc3ktPmVhc3lfY29ubik7CiAKICAgICAgICAgLyogZXhwaXJlIHRoZSBuZXcgcmVjZWl2aW5nIHBpcGVsaW5lIGhlYWQgKi8KQEAgLTEzNzYsMTkgKzE0OTYsMTkgQEAKIAogICAgICAgICAvKiBXaGVuIHdlIGZvbGxvdyByZWRpcmVjdHMgb3IgaXMgc2V0IHRvIHJldHJ5IHRoZSBjb25uZWN0aW9uLCB3ZSBtdXN0CiAgICAgICAgICAgIHRvIGdvIGJhY2sgdG8gdGhlIENPTk5FQ1Qgc3RhdGUgKi8KLSAgICAgICAgaWYoZWFzeS0+ZWFzeV9oYW5kbGUtPnJlcS5uZXd1cmwgfHwgcmV0cnkpIHsKKyAgICAgICAgaWYoZGF0YS0+cmVxLm5ld3VybCB8fCByZXRyeSkgewogICAgICAgICAgIGlmKCFyZXRyeSkgewogICAgICAgICAgICAgLyogaWYgdGhlIFVSTCBpcyBhIGZvbGxvdy1sb2NhdGlvbiBhbmQgbm90IGp1c3QgYSByZXRyaWVkIHJlcXVlc3QKICAgICAgICAgICAgICAgIHRoZW4gZmlndXJlIG91dCB0aGUgVVJMIGhlcmUgKi8KLSAgICAgICAgICAgIG5ld3VybCA9IGVhc3ktPmVhc3lfaGFuZGxlLT5yZXEubmV3dXJsOwotICAgICAgICAgICAgZWFzeS0+ZWFzeV9oYW5kbGUtPnJlcS5uZXd1cmwgPSBOVUxMOworICAgICAgICAgICAgbmV3dXJsID0gZGF0YS0+cmVxLm5ld3VybDsKKyAgICAgICAgICAgIGRhdGEtPnJlcS5uZXd1cmwgPSBOVUxMOwogICAgICAgICAgICAgZm9sbG93ID0gRk9MTE9XX1JFRElSOwogICAgICAgICAgIH0KICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICBmb2xsb3cgPSBGT0xMT1dfUkVUUlk7CiAgICAgICAgICAgZWFzeS0+cmVzdWx0ID0gQ3VybF9kb25lKCZlYXN5LT5lYXN5X2Nvbm4sIENVUkxFX09LLCBGQUxTRSk7CiAgICAgICAgICAgaWYoZWFzeS0+cmVzdWx0ID09IENVUkxFX09LKQotICAgICAgICAgICAgZWFzeS0+cmVzdWx0ID0gQ3VybF9mb2xsb3coZWFzeS0+ZWFzeV9oYW5kbGUsIG5ld3VybCwgZm9sbG93KTsKKyAgICAgICAgICAgIGVhc3ktPnJlc3VsdCA9IEN1cmxfZm9sbG93KGRhdGEsIG5ld3VybCwgZm9sbG93KTsKICAgICAgICAgICBpZihDVVJMRV9PSyA9PSBlYXN5LT5yZXN1bHQpIHsKICAgICAgICAgICAgIG11bHRpc3RhdGUoZWFzeSwgQ1VSTE1fU1RBVEVfQ09OTkVDVCk7CiAgICAgICAgICAgICByZXN1bHQgPSBDVVJMTV9DQUxMX01VTFRJX1BFUkZPUk07CkBAIC0xNDAzLDEwICsxNTIzLDEwIEBACiAKICAgICAgICAgICAvKiBidXQgZmlyc3QgY2hlY2sgdG8gc2VlIGlmIHdlIGdvdCBhIGxvY2F0aW9uIGluZm8gZXZlbiB0aG91Z2ggd2UncmUKICAgICAgICAgICAgICBub3QgZm9sbG93aW5nIHJlZGlyZWN0cyAqLwotICAgICAgICAgIGlmIChlYXN5LT5lYXN5X2hhbmRsZS0+cmVxLmxvY2F0aW9uKSB7Ci0gICAgICAgICAgICBuZXd1cmwgPSBlYXN5LT5lYXN5X2hhbmRsZS0+cmVxLmxvY2F0aW9uOwotICAgICAgICAgICAgZWFzeS0+ZWFzeV9oYW5kbGUtPnJlcS5sb2NhdGlvbiA9IE5VTEw7Ci0gICAgICAgICAgICBlYXN5LT5yZXN1bHQgPSBDdXJsX2ZvbGxvdyhlYXN5LT5lYXN5X2hhbmRsZSwgbmV3dXJsLCBGT0xMT1dfRkFLRSk7CisgICAgICAgICAgaWYgKGRhdGEtPnJlcS5sb2NhdGlvbikgeworICAgICAgICAgICAgbmV3dXJsID0gZGF0YS0+cmVxLmxvY2F0aW9uOworICAgICAgICAgICAgZGF0YS0+cmVxLmxvY2F0aW9uID0gTlVMTDsKKyAgICAgICAgICAgIGVhc3ktPnJlc3VsdCA9IEN1cmxfZm9sbG93KGRhdGEsIG5ld3VybCwgRk9MTE9XX0ZBS0UpOwogICAgICAgICAgICAgaWYgKGVhc3ktPnJlc3VsdCkKICAgICAgICAgICAgICAgZnJlZShuZXd1cmwpOwogICAgICAgICAgIH0KQEAgLTE0MjMsOSArMTU0Myw5IEBACiAgICAgICBpZihlYXN5LT5lYXN5X2Nvbm4pIHsKICAgICAgICAgLyogUmVtb3ZlIG91cnNlbHZlcyBmcm9tIHRoZSByZWNlaXZlIGFuZCBkb25lIHBpcGVsaW5lcy4gSGFuZGxlCiAgICAgICAgICAgIHNob3VsZCBiZSBvbiBvbmUgb2YgdGhlc2UgbGlzdHMsIGRlcGVuZGluZyB1cG9uIGhvdyB3ZSBnb3QgaGVyZS4gKi8KLSAgICAgICAgQ3VybF9yZW1vdmVIYW5kbGVGcm9tUGlwZWxpbmUoZWFzeS0+ZWFzeV9oYW5kbGUsCisgICAgICAgIEN1cmxfcmVtb3ZlSGFuZGxlRnJvbVBpcGVsaW5lKGRhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVhc3ktPmVhc3lfY29ubi0+cmVjdl9waXBlKTsKLSAgICAgICAgQ3VybF9yZW1vdmVIYW5kbGVGcm9tUGlwZWxpbmUoZWFzeS0+ZWFzeV9oYW5kbGUsCisgICAgICAgIEN1cmxfcmVtb3ZlSGFuZGxlRnJvbVBpcGVsaW5lKGRhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVhc3ktPmVhc3lfY29ubi0+ZG9uZV9waXBlKTsKICAgICAgICAgLyogQ2hlY2sgaWYgd2UgY2FuIG1vdmUgcGVuZGluZyByZXF1ZXN0cyB0byBzZW5kIHBpcGUgKi8KICAgICAgICAgY2hlY2tQZW5kUGlwZWxpbmUoZWFzeS0+ZWFzeV9jb25uKTsKQEAgLTE0NDksNiArMTU2OSwxNiBAQAogICAgICAgICAgIGVhc3ktPmVhc3lfY29ubiA9IE5VTEw7CiAgICAgICB9CiAKKyAgICAgIGlmKGRhdGEtPnNldC53aWxkY2FyZG1hdGNoKSB7CisgICAgICAgIGlmKGRhdGEtPndpbGRjYXJkLnN0YXRlICE9IENVUkxXQ19ET05FKSB7CisgICAgICAgICAgLyogaWYgYSB3aWxkY2FyZCBpcyBzZXQgYW5kIHdlIGFyZSBub3QgZW5kaW5nIC0+IGxldHMgc3RhcnQgYWdhaW4KKyAgICAgICAgICAgICB3aXRoIENVUkxNX1NUQVRFX0lOSVQgKi8KKyAgICAgICAgICByZXN1bHQgPSBDVVJMTV9DQUxMX01VTFRJX1BFUkZPUk07CisgICAgICAgICAgbXVsdGlzdGF0ZShlYXN5LCBDVVJMTV9TVEFURV9JTklUKTsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgfQorCiAgICAgICAvKiBhZnRlciB3ZSBoYXZlIERPTkUgd2hhdCB3ZSdyZSBzdXBwb3NlZCB0byBkbywgZ28gQ09NUExFVEVELCBhbmQKICAgICAgICAgIGl0IGRvZXNuJ3QgbWF0dGVyIHdoYXQgdGhlIEN1cmxfZG9uZSgpIHJldHVybmVkISAqLwogICAgICAgbXVsdGlzdGF0ZShlYXN5LCBDVVJMTV9TVEFURV9DT01QTEVURUQpOwpAQCAtMTQ2NCwxMyArMTU5NCwxOCBAQAogICAgICAgLyogSW1wb3J0YW50OiByZXNldCB0aGUgY29ubiBwb2ludGVyIHNvIHRoYXQgd2UgZG9uJ3QgcG9pbnQgdG8gbWVtb3J5CiAgICAgICAgICB0aGF0IGNvdWxkIGJlIGZyZWVkIGFueXRpbWUgKi8KICAgICAgIGVhc3ktPmVhc3lfY29ubiA9IE5VTEw7CisKKyAgICAgIEN1cmxfZXhwaXJlKGRhdGEsIDApOyAvKiBzdG9wIGFsbCB0aW1lcnMgKi8KICAgICAgIGJyZWFrOwogCisgICAgY2FzZSBDVVJMTV9TVEFURV9NU0dTRU5UOgorICAgICAgcmV0dXJuIENVUkxNX09LOyAvKiBkbyBub3RoaW5nICovCisKICAgICBkZWZhdWx0OgogICAgICAgcmV0dXJuIENVUkxNX0lOVEVSTkFMX0VSUk9SOwogICAgIH0KIAotICAgIGlmKENVUkxNX1NUQVRFX0NPTVBMRVRFRCAhPSBlYXN5LT5zdGF0ZSkgeworICAgIGlmKENVUkxNX1NUQVRFX0NPTVBMRVRFRCA+IGVhc3ktPnN0YXRlKSB7CiAgICAgICBpZihDVVJMRV9PSyAhPSBlYXN5LT5yZXN1bHQpIHsKICAgICAgICAgLyoKICAgICAgICAgICogSWYgYW4gZXJyb3Igd2FzIHJldHVybmVkLCBhbmQgd2UgYXJlbid0IGluIGNvbXBsZXRlZCBzdGF0ZSBub3csCkBAIC0xNDgwLDE3ICsxNjE1LDE3IEBACiAgICAgICAgIC8qIE5PVEU6IG5vIGF0dGVtcHQgdG8gZGlzY29ubmVjdCBjb25uZWN0aW9ucyBtdXN0IGJlIG1hZGUKICAgICAgICAgICAgaW4gdGhlIGNhc2UgYmxvY2tzIGFib3ZlIC0gY2xlYW51cCBoYXBwZW5zIG9ubHkgaGVyZSAqLwogCi0gICAgICAgIGVhc3ktPmVhc3lfaGFuZGxlLT5zdGF0ZS5waXBlX2Jyb2tlID0gRkFMU0U7CisgICAgICAgIGRhdGEtPnN0YXRlLnBpcGVfYnJva2UgPSBGQUxTRTsKIAogICAgICAgICBpZihlYXN5LT5lYXN5X2Nvbm4pIHsKICAgICAgICAgICAvKiBpZiB0aGlzIGhhcyBhIGNvbm5lY3Rpb24sIHVuc3Vic2NyaWJlIGZyb20gdGhlIHBpcGVsaW5lcyAqLwogICAgICAgICAgIGVhc3ktPmVhc3lfY29ubi0+d3JpdGVjaGFubmVsX2ludXNlID0gRkFMU0U7CiAgICAgICAgICAgZWFzeS0+ZWFzeV9jb25uLT5yZWFkY2hhbm5lbF9pbnVzZSA9IEZBTFNFOwotICAgICAgICAgIEN1cmxfcmVtb3ZlSGFuZGxlRnJvbVBpcGVsaW5lKGVhc3ktPmVhc3lfaGFuZGxlLAorICAgICAgICAgIEN1cmxfcmVtb3ZlSGFuZGxlRnJvbVBpcGVsaW5lKGRhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWFzeS0+ZWFzeV9jb25uLT5zZW5kX3BpcGUpOwotICAgICAgICAgIEN1cmxfcmVtb3ZlSGFuZGxlRnJvbVBpcGVsaW5lKGVhc3ktPmVhc3lfaGFuZGxlLAorICAgICAgICAgIEN1cmxfcmVtb3ZlSGFuZGxlRnJvbVBpcGVsaW5lKGRhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWFzeS0+ZWFzeV9jb25uLT5yZWN2X3BpcGUpOwotICAgICAgICAgIEN1cmxfcmVtb3ZlSGFuZGxlRnJvbVBpcGVsaW5lKGVhc3ktPmVhc3lfaGFuZGxlLAorICAgICAgICAgIEN1cmxfcmVtb3ZlSGFuZGxlRnJvbVBpcGVsaW5lKGRhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWFzeS0+ZWFzeV9jb25uLT5kb25lX3BpcGUpOwogICAgICAgICAgIC8qIENoZWNrIGlmIHdlIGNhbiBtb3ZlIHBlbmRpbmcgcmVxdWVzdHMgdG8gc2VuZCBwaXBlICovCiAgICAgICAgICAgY2hlY2tQZW5kUGlwZWxpbmUoZWFzeS0+ZWFzeV9jb25uKTsKQEAgLTE1MDcsMzAgKzE2NDIsMjkgQEAKIAogICAgICAgICBtdWx0aXN0YXRlKGVhc3ksIENVUkxNX1NUQVRFX0NPTVBMRVRFRCk7CiAgICAgICB9CisgICAgICAvKiBpZiB0aGVyZSdzIHN0aWxsIGEgY29ubmVjdGlvbiB0byB1c2UsIGNhbGwgdGhlIHByb2dyZXNzIGZ1bmN0aW9uICovCisgICAgICBlbHNlIGlmKGVhc3ktPmVhc3lfY29ubiAmJiBDdXJsX3BncnNVcGRhdGUoZWFzeS0+ZWFzeV9jb25uKSkKKyAgICAgICAgZWFzeS0+cmVzdWx0ID0gQ1VSTEVfQUJPUlRFRF9CWV9DQUxMQkFDSzsKICAgICB9CiAgIH0gd2hpbGUoMCk7Ci0gIGlmKChDVVJMTV9TVEFURV9DT01QTEVURUQgPT0gZWFzeS0+c3RhdGUpICYmICFlYXN5LT5tc2cpIHsKLSAgICBpZihlYXN5LT5lYXN5X2hhbmRsZS0+ZG5zLmhvc3RjYWNoZXR5cGUgPT0gSENBQ0hFX01VTFRJKSB7CisKKyAgaWYoQ1VSTE1fU1RBVEVfQ09NUExFVEVEID09IGVhc3ktPnN0YXRlKSB7CisgICAgaWYoZGF0YS0+ZG5zLmhvc3RjYWNoZXR5cGUgPT0gSENBQ0hFX01VTFRJKSB7CiAgICAgICAvKiBjbGVhciBvdXQgdGhlIHVzYWdlIG9mIHRoZSBzaGFyZWQgRE5TIGNhY2hlICovCi0gICAgICBlYXN5LT5lYXN5X2hhbmRsZS0+ZG5zLmhvc3RjYWNoZSA9IE5VTEw7Ci0gICAgICBlYXN5LT5lYXN5X2hhbmRsZS0+ZG5zLmhvc3RjYWNoZXR5cGUgPSBIQ0FDSEVfTk9ORTsKKyAgICAgIGRhdGEtPmRucy5ob3N0Y2FjaGUgPSBOVUxMOworICAgICAgZGF0YS0+ZG5zLmhvc3RjYWNoZXR5cGUgPSBIQ0FDSEVfTk9ORTsKICAgICB9CiAKLSAgICAvKiBub3cgYWRkIGEgbm9kZSB0byB0aGUgQ3VybF9tZXNzYWdlIGxpbmtlZCBsaXN0IHdpdGggdGhpcyBpbmZvICovCi0gICAgbXNnID0gbWFsbG9jKHNpemVvZihzdHJ1Y3QgQ3VybF9tZXNzYWdlKSk7Ci0KLSAgICBpZighbXNnKQotICAgICAgcmV0dXJuIENVUkxNX09VVF9PRl9NRU1PUlk7CisgICAgLyogbm93IGZpbGwgaW4gdGhlIEN1cmxfbWVzc2FnZSB3aXRoIHRoaXMgaW5mbyAqLworICAgIG1zZyA9ICZlYXN5LT5tc2c7CiAKICAgICBtc2ctPmV4dG1zZy5tc2cgPSBDVVJMTVNHX0RPTkU7Ci0gICAgbXNnLT5leHRtc2cuZWFzeV9oYW5kbGUgPSBlYXN5LT5lYXN5X2hhbmRsZTsKKyAgICBtc2ctPmV4dG1zZy5lYXN5X2hhbmRsZSA9IGRhdGE7CiAgICAgbXNnLT5leHRtc2cuZGF0YS5yZXN1bHQgPSBlYXN5LT5yZXN1bHQ7Ci0gICAgbXNnLT5uZXh0ID0gTlVMTDsKIAotICAgIGVhc3ktPm1zZyA9IG1zZzsKLSAgICBlYXN5LT5tc2dfbnVtID0gMTsgLyogdGhlcmUgaXMgb25lIHVucmVhZCBtZXNzYWdlIGhlcmUgKi8KKyAgICByZXN1bHQgPSBtdWx0aV9hZGRtc2cobXVsdGksIG1zZyk7CiAKLSAgICBtdWx0aS0+bnVtX21zZ3MrKzsgLyogaW5jcmVhc2UgbWVzc2FnZSBjb3VudGVyICovCisgICAgbXVsdGlzdGF0ZShlYXN5LCBDVVJMTV9TVEFURV9NU0dTRU5UKTsKICAgfQogCiAgIHJldHVybiByZXN1bHQ7CkBAIC0xNTQzLDYgKzE2NzcsNyBAQAogICBzdHJ1Y3QgQ3VybF9vbmVfZWFzeSAqZWFzeTsKICAgQ1VSTE1jb2RlIHJldHVybmNvZGU9Q1VSTE1fT0s7CiAgIHN0cnVjdCBDdXJsX3RyZWUgKnQ7CisgIHN0cnVjdCB0aW1ldmFsIG5vdyA9IEN1cmxfdHZub3coKTsKIAogICBpZighR09PRF9NVUxUSV9IQU5ETEUobXVsdGkpKQogICAgIHJldHVybiBDVVJMTV9CQURfSEFORExFOwpAQCAtMTU1MCwxMSArMTY4NSwyNiBAQAogICBlYXN5PW11bHRpLT5lYXN5Lm5leHQ7CiAgIHdoaWxlKGVhc3kgIT0gJm11bHRpLT5lYXN5KSB7CiAgICAgQ1VSTE1jb2RlIHJlc3VsdDsKKyAgICBzdHJ1Y3QgV2lsZGNhcmREYXRhICp3YyA9ICZlYXN5LT5lYXN5X2hhbmRsZS0+d2lsZGNhcmQ7CisKKyAgICBpZihlYXN5LT5lYXN5X2hhbmRsZS0+c2V0LndpbGRjYXJkbWF0Y2gpIHsKKyAgICAgIGlmKCF3Yy0+ZmlsZWxpc3QpIHsKKyAgICAgICAgQ1VSTGNvZGUgcmV0ID0gQ3VybF93aWxkY2FyZF9pbml0KHdjKTsgLyogaW5pdCB3aWxkY2FyZCBzdHJ1Y3R1cmVzICovCisgICAgICAgIGlmKHJldCkKKyAgICAgICAgICByZXR1cm4gQ1VSTE1fT1VUX09GX01FTU9SWTsKKyAgICAgIH0KKyAgICB9CiAKICAgICBkbwotICAgICAgcmVzdWx0ID0gbXVsdGlfcnVuc2luZ2xlKG11bHRpLCBlYXN5KTsKKyAgICAgIHJlc3VsdCA9IG11bHRpX3J1bnNpbmdsZShtdWx0aSwgbm93LCBlYXN5KTsKICAgICB3aGlsZSAoQ1VSTE1fQ0FMTF9NVUxUSV9QRVJGT1JNID09IHJlc3VsdCk7CiAKKyAgICBpZihlYXN5LT5lYXN5X2hhbmRsZS0+c2V0LndpbGRjYXJkbWF0Y2gpIHsKKyAgICAgIC8qIGRlc3RydWN0IHdpbGRjYXJkIHN0cnVjdHVyZXMgaWYgaXQgaXMgbmVlZGVkICovCisgICAgICBpZih3Yy0+c3RhdGUgPT0gQ1VSTFdDX0RPTkUgfHwgcmVzdWx0KQorICAgICAgICBDdXJsX3dpbGRjYXJkX2R0b3Iod2MpOworICAgIH0KKwogICAgIGlmKHJlc3VsdCkKICAgICAgIHJldHVybmNvZGUgPSByZXN1bHQ7CiAKQEAgLTE1NjUsMjAgKzE3MTUsMTcgQEAKICAgICogU2ltcGx5IHJlbW92ZSBhbGwgZXhwaXJlZCB0aW1lcnMgZnJvbSB0aGUgc3BsYXkgc2luY2UgaGFuZGxlcyBhcmUgZGVhbHQKICAgICogd2l0aCB1bmNvbmRpdGlvbmFsbHkgYnkgdGhpcyBmdW5jdGlvbiBhbmQgY3VybF9tdWx0aV90aW1lb3V0KCkgcmVxdWlyZXMKICAgICogdGhhdCBhbHJlYWR5IHBhc3NlZC9oYW5kbGVkIGV4cGlyZSB0aW1lcyBhcmUgcmVtb3ZlZCBmcm9tIHRoZSBzcGxheS4KKyAgICoKKyAgICogSXQgaXMgaW1wb3J0YW50IHRoYXQgdGhlICdub3cnIHZhbHVlIGlzIHNldCBhdCB0aGUgZW50cnkgb2YgdGhpcyBmdW5jdGlvbgorICAgKiBhbmQgbm90IGZvciB0aGUgY3VycmVudCB0aW1lIGFzIGl0IG1heSBoYXZlIHRpY2tlZCBhIGxpdHRsZSB3aGlsZSBzaW5jZQorICAgKiB0aGVuIGFuZCB0aGVuIHdlIHJpc2sgdGhpcyBsb29wIHRvIHJlbW92ZSB0aW1lcnMgdGhhdCBhY3R1YWxseSBoYXZlIG5vdAorICAgKiBiZWVuIGhhbmRsZWQhCiAgICAqLwogICBkbyB7Ci0gICAgc3RydWN0IHRpbWV2YWwgbm93ID0gQ3VybF90dm5vdygpOwotCiAgICAgbXVsdGktPnRpbWV0cmVlID0gQ3VybF9zcGxheWdldGJlc3Qobm93LCBtdWx0aS0+dGltZXRyZWUsICZ0KTsKLSAgICBpZih0KSB7Ci0gICAgICBzdHJ1Y3QgU2Vzc2lvbkhhbmRsZSAqZCA9IHQtPnBheWxvYWQ7Ci0gICAgICBzdHJ1Y3QgdGltZXZhbCogdHYgPSAmZC0+c3RhdGUuZXhwaXJldGltZTsKLQotICAgICAgLyogY2xlYXIgdGhlIGV4cGlyZSB0aW1lcyB3aXRoaW4gdGhlIGhhbmRsZXMgdGhhdCB3ZSByZW1vdmUgZnJvbSB0aGUKLSAgICAgICAgIHNwbGF5IHRyZWUgKi8KLSAgICAgIHR2LT50dl9zZWMgPSAwOwotICAgICAgdHYtPnR2X3VzZWMgPSAwOwotICAgIH0KKyAgICBpZih0KQorICAgICAgLyogdGhlIHJlbW92ZWQgbWF5IGhhdmUgYW5vdGhlciB0aW1lb3V0IGluIHF1ZXVlICovCisgICAgICAodm9pZClhZGRfbmV4dF90aW1lb3V0KG5vdywgbXVsdGksIHQtPnBheWxvYWQpOwogCiAgIH0gd2hpbGUodCk7CiAKQEAgLTE1OTAsMTQgKzE3MzcsNiBAQAogICByZXR1cm4gcmV0dXJuY29kZTsKIH0KIAotLyogVGhpcyBpcyBjYWxsZWQgd2hlbiBhbiBlYXN5IGhhbmRsZSBpcyBjbGVhbnVwJ2VkIHRoYXQgaXMgcGFydCBvZiBhIG11bHRpCi0gICBoYW5kbGUgKi8KLXZvaWQgQ3VybF9tdWx0aV9ybWVhc3kodm9pZCAqbXVsdGlfaGFuZGxlLCBDVVJMICplYXN5X2hhbmRsZSkKLXsKLSAgY3VybF9tdWx0aV9yZW1vdmVfaGFuZGxlKG11bHRpX2hhbmRsZSwgZWFzeV9oYW5kbGUpOwotfQotCi0KIENVUkxNY29kZSBjdXJsX211bHRpX2NsZWFudXAoQ1VSTE0gKm11bHRpX2hhbmRsZSkKIHsKICAgc3RydWN0IEN1cmxfbXVsdGkgKm11bHRpPShzdHJ1Y3QgQ3VybF9tdWx0aSAqKW11bHRpX2hhbmRsZTsKQEAgLTE2MzgsNiArMTc3Nyw5IEBACiAKICAgICBDdXJsX3JtX2Nvbm5jKG11bHRpLT5jb25uYyk7CiAKKyAgICAvKiByZW1vdmUgdGhlIHBlbmRpbmcgbGlzdCBvZiBtZXNzYWdlcyAqLworICAgIEN1cmxfbGxpc3RfZGVzdHJveShtdWx0aS0+bXNnbGlzdCwgTlVMTCk7CisKICAgICAvKiByZW1vdmUgYWxsIGVhc3kgaGFuZGxlcyAqLwogICAgIGVhc3kgPSBtdWx0aS0+ZWFzeS5uZXh0OwogICAgIHdoaWxlKGVhc3kgIT0gJm11bHRpLT5lYXN5KSB7CkBAIC0xNjUzLDggKzE3OTUsNiBAQAogCiAgICAgICBDdXJsX2Vhc3lfYWRkbXVsdGkoZWFzeS0+ZWFzeV9oYW5kbGUsIE5VTEwpOyAvKiBjbGVhciB0aGUgYXNzb2NpYXRpb24gKi8KIAotICAgICAgaWYoZWFzeS0+bXNnKQotICAgICAgICBmcmVlKGVhc3ktPm1zZyk7CiAgICAgICBmcmVlKGVhc3kpOwogICAgICAgZWFzeSA9IG5leHRlYXN5OwogICAgIH0KQEAgLTE2NjcsMzMgKzE4MDcsMzggQEAKICAgICByZXR1cm4gQ1VSTE1fQkFEX0hBTkRMRTsKIH0KIAorLyoKKyAqIGN1cmxfbXVsdGlfaW5mb19yZWFkKCkKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIHRoZSBwcmltYXJ5IHdheSBmb3IgYSBtdWx0aS9tdWx0aV9zb2NrZXQgYXBwbGljYXRpb24gdG8KKyAqIGZpZ3VyZSBvdXQgaWYgYSB0cmFuc2ZlciBoYXMgZW5kZWQuIFdlIE1VU1QgbWFrZSB0aGlzIGZ1bmN0aW9uIGFzIGZhc3QgYXMKKyAqIHBvc3NpYmxlIGFzIGl0IHdpbGwgYmUgcG9sbGVkIGZyZXF1ZW50bHkgYW5kIHdlIE1VU1QgTk9UIHNjYW4gYW55IGxpc3RzIGluCisgKiBoZXJlIHRvIGZpZ3VyZSBvdXQgdGhpbmdzLiBXZSBtdXN0IHNjYWxlIGZpbmUgdG8gdGhvdXNhbmRzIG9mIGhhbmRsZXMgYW5kCisgKiBiZXlvbmQuIFRoZSBjdXJyZW50IGRlc2lnbiBpcyBmdWxseSBPKDEpLgorICovCisKIENVUkxNc2cgKmN1cmxfbXVsdGlfaW5mb19yZWFkKENVUkxNICptdWx0aV9oYW5kbGUsIGludCAqbXNnc19pbl9xdWV1ZSkKIHsKICAgc3RydWN0IEN1cmxfbXVsdGkgKm11bHRpPShzdHJ1Y3QgQ3VybF9tdWx0aSAqKW11bHRpX2hhbmRsZTsKKyAgc3RydWN0IEN1cmxfbWVzc2FnZSAqbXNnOwogCiAgICptc2dzX2luX3F1ZXVlID0gMDsgLyogZGVmYXVsdCB0byBub25lICovCiAKLSAgaWYoR09PRF9NVUxUSV9IQU5ETEUobXVsdGkpKSB7Ci0gICAgc3RydWN0IEN1cmxfb25lX2Vhc3kgKmVhc3k7CisgIGlmKEdPT0RfTVVMVElfSEFORExFKG11bHRpKSAmJiBDdXJsX2xsaXN0X2NvdW50KG11bHRpLT5tc2dsaXN0KSkgeworICAgIC8qIHRoZXJlIGlzIG9uZSBvciBtb3JlIG1lc3NhZ2VzIGluIHRoZSBsaXN0ICovCisgICAgc3RydWN0IGN1cmxfbGxpc3RfZWxlbWVudCAqZTsKIAotICAgIGlmKCFtdWx0aS0+bnVtX21zZ3MpCi0gICAgICByZXR1cm4gTlVMTDsgLyogbm8gbWVzc2FnZXMgbGVmdCB0byByZXR1cm4gKi8KKyAgICAvKiBleHRyYWN0IHRoZSBoZWFkIG9mIHRoZSBsaXN0IHRvIHJldHVybiAqLworICAgIGUgPSBtdWx0aS0+bXNnbGlzdC0+aGVhZDsKIAotICAgIGVhc3k9bXVsdGktPmVhc3kubmV4dDsKLSAgICB3aGlsZShlYXN5ICE9ICZtdWx0aS0+ZWFzeSkgewotICAgICAgaWYoZWFzeS0+bXNnX251bSkgewotICAgICAgICBlYXN5LT5tc2dfbnVtLS07Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgZWFzeSA9IGVhc3ktPm5leHQ7Ci0gICAgfQotICAgIGlmKCFlYXN5KQotICAgICAgcmV0dXJuIE5VTEw7IC8qIHRoaXMgbWVhbnMgaW50ZXJuYWwgY291bnQgY29uZnVzaW9uIHJlYWxseSAqLworICAgIG1zZyA9IGUtPnB0cjsKIAotICAgIG11bHRpLT5udW1fbXNncy0tOwotICAgICptc2dzX2luX3F1ZXVlID0gbXVsdGktPm51bV9tc2dzOworICAgIC8qIHJlbW92ZSB0aGUgZXh0cmFjdGVkIGVudHJ5ICovCisgICAgQ3VybF9sbGlzdF9yZW1vdmUobXVsdGktPm1zZ2xpc3QsIGUsIE5VTEwpOwogCi0gICAgcmV0dXJuICZlYXN5LT5tc2ctPmV4dG1zZzsKKyAgICAqbXNnc19pbl9xdWV1ZSA9IChpbnQpQ3VybF9sbGlzdF9jb3VudChtdWx0aS0+bXNnbGlzdCk7CisKKyAgICByZXR1cm4gJm1zZy0+ZXh0bXNnOwogICB9CiAgIGVsc2UKICAgICByZXR1cm4gTlVMTDsKQEAgLTE3NTcsMTEgKzE5MDIsMTIgQEAKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAorICAgIC8qIHdlIGtub3cgKGVudHJ5ICE9IE5VTEwpIGF0IHRoaXMgcG9pbnQsIHNlZSB0aGUgbG9naWMgYWJvdmUgKi8KICAgICBtdWx0aS0+c29ja2V0X2NiKGVhc3ktPmVhc3lfaGFuZGxlLAogICAgICAgICAgICAgICAgICAgICAgcywKICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbiwKICAgICAgICAgICAgICAgICAgICAgIG11bHRpLT5zb2NrZXRfdXNlcnAsCi0gICAgICAgICAgICAgICAgICAgICBlbnRyeSA/IGVudHJ5LT5zb2NrZXRwIDogTlVMTCk7CisgICAgICAgICAgICAgICAgICAgICBlbnRyeS0+c29ja2V0cCk7CiAKICAgICBlbnRyeS0+YWN0aW9uID0gYWN0aW9uOyAvKiBzdG9yZSB0aGUgY3VycmVudCBhY3Rpb24gc3RhdGUgKi8KICAgfQpAQCAtMTg1MSw2ICsxOTk3LDYyIEBACiAgIGVhc3ktPm51bXNvY2tzID0gbnVtOwogfQogCisvKgorICogYWRkX25leHRfdGltZW91dCgpCisgKgorICogRWFjaCBTZXNzaW9uSGFuZGxlIGhhcyBhIGxpc3Qgb2YgdGltZW91dHMuIFRoZSBhZGRfbmV4dF90aW1lb3V0KCkgaXMgY2FsbGVkCisgKiB3aGVuIGl0IGhhcyBqdXN0IGJlZW4gcmVtb3ZlZCBmcm9tIHRoZSBzcGxheSB0cmVlIGJlY2F1c2UgdGhlIHRpbWVvdXQgaGFzCisgKiBleHBpcmVkLiBUaGlzIGZ1bmN0aW9uIGlzIHRoZW4gdG8gYWR2YW5jZSBpbiB0aGUgbGlzdCB0byBwaWNrIHRoZSBuZXh0CisgKiB0aW1lb3V0IHRvIHVzZSAoc2tpcCB0aGUgYWxyZWFkeSBleHBpcmVkIG9uZXMpIGFuZCBhZGQgdGhpcyBub2RlIGJhY2sgdG8KKyAqIHRoZSBzcGxheSB0cmVlIGFnYWluLgorICoKKyAqIFRoZSBzcGxheSB0cmVlIG9ubHkgaGFzIGVhY2ggc2Vzc2lvbmhhbmRsZSBhcyBhIHNpbmdsZSBub2RlIGFuZCB0aGUgbmVhcmVzdAorICogdGltZW91dCBpcyB1c2VkIHRvIHNvcnQgaXQgb24uCisgKi8KK3N0YXRpYyBDVVJMTWNvZGUgYWRkX25leHRfdGltZW91dChzdHJ1Y3QgdGltZXZhbCBub3csCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IEN1cmxfbXVsdGkgKm11bHRpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBTZXNzaW9uSGFuZGxlICpkKQoreworICBzdHJ1Y3QgdGltZXZhbCAqdHYgPSAmZC0+c3RhdGUuZXhwaXJldGltZTsKKyAgc3RydWN0IGN1cmxfbGxpc3QgKmxpc3QgPSBkLT5zdGF0ZS50aW1lb3V0bGlzdDsKKyAgc3RydWN0IGN1cmxfbGxpc3RfZWxlbWVudCAqZTsKKworICAvKiBtb3ZlIG92ZXIgdGhlIHRpbWVvdXQgbGlzdCBmb3IgdGhpcyBzcGVjaWZpYyBoYW5kbGUgYW5kIHJlbW92ZSBhbGwKKyAgICAgdGltZW91dHMgdGhhdCBhcmUgbm93IHBhc3NlZCB0ZW5zZSBhbmQgc3RvcmUgdGhlIG5leHQgcGVuZGluZworICAgICB0aW1lb3V0IGluICp0diAqLworICBmb3IoZSA9IGxpc3QtPmhlYWQ7IGU7ICkgeworICAgIHN0cnVjdCBjdXJsX2xsaXN0X2VsZW1lbnQgKm4gPSBlLT5uZXh0OworICAgIGxvbmcgZGlmZiA9IGN1cmx4X3R2ZGlmZigqKHN0cnVjdCB0aW1ldmFsICopZS0+cHRyLCBub3cpOworICAgIGlmKGRpZmYgPD0gMCkKKyAgICAgIC8qIHJlbW92ZSBvdXRkYXRlZCBlbnRyeSAqLworICAgICAgQ3VybF9sbGlzdF9yZW1vdmUobGlzdCwgZSwgTlVMTCk7CisgICAgZWxzZQorICAgICAgLyogdGhlIGxpc3QgaXMgc29ydGVkIHNvIGdldCBvdXQgb24gdGhlIGZpcnN0IG1pc21hdGNoICovCisgICAgICBicmVhazsKKyAgICBlID0gbjsKKyAgfQorICBpZighbGlzdC0+c2l6ZSkgIHsKKyAgICAvKiBjbGVhciB0aGUgZXhwaXJlIHRpbWVzIHdpdGhpbiB0aGUgaGFuZGxlcyB0aGF0IHdlIHJlbW92ZSBmcm9tIHRoZQorICAgICAgIHNwbGF5IHRyZWUgKi8KKyAgICB0di0+dHZfc2VjID0gMDsKKyAgICB0di0+dHZfdXNlYyA9IDA7CisgIH0KKyAgZWxzZSB7CisgICAgZSA9IGxpc3QtPmhlYWQ7CisgICAgLyogY29weSB0aGUgZmlyc3QgZW50cnkgdG8gJ3R2JyAqLworICAgIG1lbWNweSh0diwgZS0+cHRyLCBzaXplb2YoKnR2KSk7CisKKyAgICAvKiByZW1vdmUgZmlyc3QgZW50cnkgZnJvbSBsaXN0ICovCisgICAgQ3VybF9sbGlzdF9yZW1vdmUobGlzdCwgZSwgTlVMTCk7CisKKyAgICAvKiBpbnNlcnQgdGhpcyBub2RlIGFnYWluIGludG8gdGhlIHNwbGF5ICovCisgICAgbXVsdGktPnRpbWV0cmVlID0gQ3VybF9zcGxheWluc2VydCgqdHYsIG11bHRpLT50aW1ldHJlZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZkLT5zdGF0ZS50aW1lbm9kZSk7CisgIH0KKyAgcmV0dXJuIENVUkxNX09LOworfQorCisKIHN0YXRpYyBDVVJMTWNvZGUgbXVsdGlfc29ja2V0KHN0cnVjdCBDdXJsX211bHRpICptdWx0aSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgY2hlY2thbGwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJsX3NvY2tldF90IHMsCkBAIC0xODYwLDYgKzIwNjIsNyBAQAogICBDVVJMTWNvZGUgcmVzdWx0ID0gQ1VSTE1fT0s7CiAgIHN0cnVjdCBTZXNzaW9uSGFuZGxlICpkYXRhID0gTlVMTDsKICAgc3RydWN0IEN1cmxfdHJlZSAqdDsKKyAgc3RydWN0IHRpbWV2YWwgbm93ID0gQ3VybF90dm5vdygpOwogCiAgIGlmKGNoZWNrYWxsKSB7CiAgICAgc3RydWN0IEN1cmxfb25lX2Vhc3kgKmVhc3lwOwpAQCAtMTkxNCw3ICsyMTE3LDcgQEAKICAgICAgICAgZGF0YS0+c2V0Lm9uZV9lYXN5LT5lYXN5X2Nvbm4tPmNzZWxlY3RfYml0cyA9IGV2X2JpdG1hc2s7CiAKICAgICAgIGRvCi0gICAgICAgIHJlc3VsdCA9IG11bHRpX3J1bnNpbmdsZShtdWx0aSwgZGF0YS0+c2V0Lm9uZV9lYXN5KTsKKyAgICAgICAgcmVzdWx0ID0gbXVsdGlfcnVuc2luZ2xlKG11bHRpLCBub3csIGRhdGEtPnNldC5vbmVfZWFzeSk7CiAgICAgICB3aGlsZSAoQ1VSTE1fQ0FMTF9NVUxUSV9QRVJGT1JNID09IHJlc3VsdCk7CiAKICAgICAgIGlmKGRhdGEtPnNldC5vbmVfZWFzeS0+ZWFzeV9jb25uKQpAQCAtMTkzNCwxOCArMjEzNywyMyBAQAogICAgIH0KICAgfQogCisgIG5vdy50dl91c2VjICs9IDQwMDAwOyAvKiBjb21wZW5zYXRlIGZvciBiYWQgcHJlY2lzaW9uIHRpbWVycyB0aGF0IG1pZ2h0J3ZlCisgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmlnZ2VyZWQgdG9vIGVhcmx5ICovCisgIGlmKG5vdy50dl91c2VjID4gMTAwMDAwMCkgeworICAgIG5vdy50dl9zZWMrKzsKKyAgICBub3cudHZfdXNlYyAtPSAxMDAwMDAwOworICB9CisKICAgLyoKICAgICogVGhlIGxvb3AgZm9sbG93aW5nIGhlcmUgd2lsbCBnbyBvbiBhcyBsb25nIGFzIHRoZXJlIGFyZSBleHBpcmUtdGltZXMgbGVmdAogICAgKiB0byBwcm9jZXNzIGluIHRoZSBzcGxheSBhbmQgJ2RhdGEnIHdpbGwgYmUgcmUtYXNzaWduZWQgZm9yIGV2ZXJ5IGV4cGlyZWQKICAgICogaGFuZGxlIHdlIGRlYWwgd2l0aC4KICAgICovCiAgIGRvIHsKLSAgICBzdHJ1Y3QgdGltZXZhbCBub3c7Ci0KICAgICAvKiB0aGUgZmlyc3QgbG9vcCBsYXAgJ2RhdGEnIGNhbiBiZSBOVUxMICovCiAgICAgaWYoZGF0YSkgewogICAgICAgZG8KLSAgICAgICAgcmVzdWx0ID0gbXVsdGlfcnVuc2luZ2xlKG11bHRpLCBkYXRhLT5zZXQub25lX2Vhc3kpOworICAgICAgICByZXN1bHQgPSBtdWx0aV9ydW5zaW5nbGUobXVsdGksIG5vdywgZGF0YS0+c2V0Lm9uZV9lYXN5KTsKICAgICAgIHdoaWxlIChDVVJMTV9DQUxMX01VTFRJX1BFUkZPUk0gPT0gcmVzdWx0KTsKIAogICAgICAgaWYoQ1VSTE1fT0sgPj0gcmVzdWx0KQpAQCAtMTk1NywyMCArMjE2NSwxMCBAQAogICAgIC8qIENoZWNrIGlmIHRoZXJlJ3Mgb25lIChtb3JlKSBleHBpcmVkIHRpbWVyIHRvIGRlYWwgd2l0aCEgVGhpcyBmdW5jdGlvbgogICAgICAgIGV4dHJhY3RzIGEgbWF0Y2hpbmcgbm9kZSBpZiB0aGVyZSBpcyBvbmUgKi8KIAotICAgIG5vdyA9IEN1cmxfdHZub3coKTsKLSAgICBub3cudHZfdXNlYyArPSAxMDAwOyAvKiB0byBjb21wZW5zYXRlIGZvciB0aGUgdHJ1bmNhdGluZyBvZiA5OTl1cyB0byAwbXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2UgYWx3YXlzIGFkZCB0aW1lIGhlcmUgdG8gbWFrZSB0aGUgY29tcGFyaXNvbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlbG93IGJldHRlciAqLwotCiAgICAgbXVsdGktPnRpbWV0cmVlID0gQ3VybF9zcGxheWdldGJlc3Qobm93LCBtdWx0aS0+dGltZXRyZWUsICZ0KTsKICAgICBpZih0KSB7Ci0gICAgICAvKiBhc3NpZ24gJ2RhdGEnIHRvIGJlIHRoZSBlYXN5IGhhbmRsZSB3ZSBqdXN0IHJlbW92ZWQgZnJvbSB0aGUgc3BsYXkKLSAgICAgICAgIHRyZWUgKi8KLSAgICAgIGRhdGEgPSB0LT5wYXlsb2FkOwotICAgICAgLyogY2xlYXIgdGhlIGV4cGlyZSB0aW1lIHdpdGhpbiB0aGUgaGFuZGxlIHdlIHJlbW92ZWQgZnJvbSB0aGUKLSAgICAgICAgIHNwbGF5IHRyZWUgKi8KLSAgICAgIGRhdGEtPnN0YXRlLmV4cGlyZXRpbWUudHZfc2VjID0gMDsKLSAgICAgIGRhdGEtPnN0YXRlLmV4cGlyZXRpbWUudHZfdXNlYyA9IDA7CisgICAgICBkYXRhID0gdC0+cGF5bG9hZDsgLyogYXNzaWduIHRoaXMgZm9yIG5leHQgbG9vcCAqLworICAgICAgKHZvaWQpYWRkX25leHRfdGltZW91dChub3csIG11bHRpLCB0LT5wYXlsb2FkKTsKICAgICB9CiAKICAgfSB3aGlsZSh0KTsKQEAgLTIxMDYsMTIgKzIzMDQsMjIgQEAKIHN0YXRpYyBpbnQgdXBkYXRlX3RpbWVyKHN0cnVjdCBDdXJsX211bHRpICptdWx0aSkKIHsKICAgbG9uZyB0aW1lb3V0X21zOworCiAgIGlmKCFtdWx0aS0+dGltZXJfY2IpCiAgICAgcmV0dXJuIDA7Ci0gIGlmKCBtdWx0aV90aW1lb3V0KG11bHRpLCAmdGltZW91dF9tcykgIT0gQ1VSTE1fT0sgKQorICBpZihtdWx0aV90aW1lb3V0KG11bHRpLCAmdGltZW91dF9tcykpIHsKICAgICByZXR1cm4gLTE7Ci0gIGlmKCB0aW1lb3V0X21zIDwgMCApCisgIH0KKyAgaWYoIHRpbWVvdXRfbXMgPCAwICkgeworICAgIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdGltZXZhbCBub25lPXswLDB9OworICAgIGlmKEN1cmxfc3BsYXljb21wYXJla2V5cyhub25lLCBtdWx0aS0+dGltZXJfbGFzdGNhbGwpKSB7CisgICAgICBtdWx0aS0+dGltZXJfbGFzdGNhbGwgPSBub25lOworICAgICAgLyogdGhlcmUncyBubyB0aW1lb3V0IG5vdyBidXQgdGhlcmUgd2FzIG9uZSBwcmV2aW91c2x5LCB0ZWxsIHRoZSBhcHAgdG8KKyAgICAgICAgIGRpc2FibGUgaXQgKi8KKyAgICAgIHJldHVybiBtdWx0aS0+dGltZXJfY2IoKENVUkxNKiltdWx0aSwgLTEsIG11bHRpLT50aW1lcl91c2VycCk7CisgICAgfQogICAgIHJldHVybiAwOworICB9CiAKICAgLyogV2hlbiBtdWx0aV90aW1lb3V0KCkgaXMgZG9uZSwgbXVsdGktPnRpbWV0cmVlIHBvaW50cyB0byB0aGUgbm9kZSB3aXRoIHRoZQogICAgKiB0aW1lb3V0IHdlIGdvdCB0aGUgKHJlbGF0aXZlKSB0aW1lLW91dCB0aW1lIGZvci4gV2UgY2FuIHRodXMgZWFzaWx5IGNoZWNrCkBAIC0yMTI5LDcgKzIzMzcsOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubikKIHsKICAgc2l6ZV90IHBpcGVMZW4gPSBjb25uLT5zZW5kX3BpcGUtPnNpemUgKyBjb25uLT5yZWN2X3BpcGUtPnNpemU7CisgIHN0cnVjdCBjdXJsX2xsaXN0X2VsZW1lbnQgKnNlbmRoZWFkID0gY29ubi0+c2VuZF9waXBlLT5oZWFkOwogICBzdHJ1Y3QgY3VybF9sbGlzdCAqcGlwZWxpbmU7CisgIENVUkxjb2RlIHJjOwogCiAgIGlmKCFDdXJsX2lzUGlwZWxpbmluZ0VuYWJsZWQoaGFuZGxlKSB8fAogICAgICBwaXBlTGVuID09IDApCkBAIC0yMTQyLDcgKzIzNTIsMTcgQEAKICAgICAgIHBpcGVsaW5lID0gY29ubi0+cGVuZF9waXBlOwogICB9CiAKLSAgcmV0dXJuIEN1cmxfYWRkSGFuZGxlVG9QaXBlbGluZShoYW5kbGUsIHBpcGVsaW5lKTsKKyAgcmMgPSBDdXJsX2FkZEhhbmRsZVRvUGlwZWxpbmUoaGFuZGxlLCBwaXBlbGluZSk7CisKKyAgaWYgKHBpcGVsaW5lID09IGNvbm4tPnNlbmRfcGlwZSAmJiBzZW5kaGVhZCAhPSBjb25uLT5zZW5kX3BpcGUtPmhlYWQpIHsKKyAgICAgIC8qIHRoaXMgaXMgYSBuZXcgb25lIGFzIGhlYWQsIGV4cGlyZSBpdCAqLworICAgICAgY29ubi0+d3JpdGVjaGFubmVsX2ludXNlID0gRkFMU0U7IC8qIG5vdCBpbiB1c2UgeWV0ICovCisgICAgICBpbmZvZihjb25uLT5kYXRhLCAiJXAgaXMgYXQgc2VuZCBwaXBlIGhlYWQhXG4iLAorICAgICAgICAgICAgY29ubi0+c2VuZF9waXBlLT5oZWFkLT5wdHIpOworICAgICAgQ3VybF9leHBpcmUoY29ubi0+c2VuZF9waXBlLT5oZWFkLT5wdHIsIDEpOworICB9CisKKyAgcmV0dXJuIHJjOwogfQogCiBzdGF0aWMgaW50IGNoZWNrUGVuZFBpcGVsaW5lKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubikKQEAgLTIyNDIsMTAgKzI0NjIsNzQgQEAKICAgcmV0dXJuIEZBTFNFOwogfQogCi0vKiBnaXZlbiBhIG51bWJlciBvZiBtaWxsaXNlY29uZHMgZnJvbSBub3cgdG8gdXNlIHRvIHNldCB0aGUgJ2FjdCBiZWZvcmUKLSAgIHRoaXMnLXRpbWUgZm9yIHRoZSB0cmFuc2ZlciwgdG8gYmUgZXh0cmFjdGVkIGJ5IGN1cmxfbXVsdGlfdGltZW91dCgpCisvKgorICogbXVsdGlfZnJlZXRpbWVvdXQoKQorICoKKyAqIENhbGxiYWNrIHVzZWQgYnkgdGhlIGxsaXN0IHN5c3RlbSB3aGVuIGEgc2luZ2xlIHRpbWVvdXQgbGlzdCBlbnRyeSBpcworICogZGVzdHJveWVkLgorICovCitzdGF0aWMgdm9pZCBtdWx0aV9mcmVldGltZW91dCh2b2lkICp1c2VyLCB2b2lkICplbnRyeXB0cikKK3sKKyAgKHZvaWQpdXNlcjsKIAotICAgUGFzcyB6ZXJvIHRvIGNsZWFyIHRoZSB0aW1lb3V0IHZhbHVlIGZvciB0aGlzIGhhbmRsZS4KKyAgLyogdGhlIGVudHJ5IHdhcyBwbGFpbiBtYWxsb2MoKSdlZCAqLworICBmcmVlKGVudHJ5cHRyKTsKK30KKworLyoKKyAqIG11bHRpX2FkZHRpbWVvdXQoKQorICoKKyAqIEFkZCBhIHRpbWVzdGFtcCB0byB0aGUgbGlzdCBvZiB0aW1lb3V0cy4gS2VlcCB0aGUgbGlzdCBzb3J0ZWQgc28gdGhhdCBoZWFkCisgKiBvZiBsaXN0IGlzIGFsd2F5cyB0aGUgdGltZW91dCBuZWFyZXN0IGluIHRpbWUuCisgKgorICovCitzdGF0aWMgQ1VSTE1jb2RlCittdWx0aV9hZGR0aW1lb3V0KHN0cnVjdCBjdXJsX2xsaXN0ICp0aW1lb3V0bGlzdCwKKyAgICAgICAgICAgICAgICAgc3RydWN0IHRpbWV2YWwgKnN0YW1wKQoreworICBzdHJ1Y3QgY3VybF9sbGlzdF9lbGVtZW50ICplOworICBzdHJ1Y3QgdGltZXZhbCAqdGltZWR1cDsKKyAgc3RydWN0IGN1cmxfbGxpc3RfZWxlbWVudCAqcHJldiA9IE5VTEw7CisKKyAgdGltZWR1cCA9IG1hbGxvYyhzaXplb2YoKnRpbWVkdXApKTsKKyAgaWYoIXRpbWVkdXApCisgICAgcmV0dXJuIENVUkxNX09VVF9PRl9NRU1PUlk7CisKKyAgLyogY29weSB0aGUgdGltZXN0YW1wICovCisgIG1lbWNweSh0aW1lZHVwLCBzdGFtcCwgc2l6ZW9mKCp0aW1lZHVwKSk7CisKKyAgaWYoQ3VybF9sbGlzdF9jb3VudCh0aW1lb3V0bGlzdCkpIHsKKyAgICAvKiBmaW5kIHRoZSBjb3JyZWN0IHNwb3QgaW4gdGhlIGxpc3QgKi8KKyAgICBmb3IoZSA9IHRpbWVvdXRsaXN0LT5oZWFkOyBlOyBlID0gZS0+bmV4dCkgeworICAgICAgc3RydWN0IHRpbWV2YWwgKmNoZWNrdGltZSA9IGUtPnB0cjsKKyAgICAgIGxvbmcgZGlmZiA9IGN1cmx4X3R2ZGlmZigqY2hlY2t0aW1lLCAqdGltZWR1cCk7CisgICAgICBpZihkaWZmID4gMCkKKyAgICAgICAgYnJlYWs7CisgICAgICBwcmV2ID0gZTsKKyAgICB9CisKKyAgfQorICAvKiBlbHNlCisgICAgIHRoaXMgaXMgdGhlIGZpcnN0IHRpbWVvdXQgb24gdGhlIGxpc3QgKi8KKworICBpZighQ3VybF9sbGlzdF9pbnNlcnRfbmV4dCh0aW1lb3V0bGlzdCwgcHJldiwgdGltZWR1cCkpIHsKKyAgICBmcmVlKHRpbWVkdXApOworICAgIHJldHVybiBDVVJMTV9PVVRfT0ZfTUVNT1JZOworICB9CisKKyAgcmV0dXJuIENVUkxNX09LOworfQorCisvKgorICogQ3VybF9leHBpcmUoKQorICoKKyAqIGdpdmVuIGEgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBmcm9tIG5vdyB0byB1c2UgdG8gc2V0IHRoZSAnYWN0IGJlZm9yZQorICogdGhpcyctdGltZSBmb3IgdGhlIHRyYW5zZmVyLCB0byBiZSBleHRyYWN0ZWQgYnkgY3VybF9tdWx0aV90aW1lb3V0KCkKKyAqCisgKiBOb3RlIHRoYXQgdGhlIHRpbWVvdXQgd2lsbCBiZSBhZGRlZCB0byBhIHF1ZXVlIG9mIHRpbWVvdXRzIGlmIGl0IGRlZmluZXMgYQorICogbW9tZW50IGluIHRpbWUgdGhhdCBpcyBsYXRlciB0aGFuIHRoZSBjdXJyZW50IGhlYWQgb2YgcXVldWUuCisgKgorICogUGFzcyB6ZXJvIHRvIGNsZWFyIGFsbCB0aW1lb3V0IHZhbHVlcyBmb3IgdGhpcyBoYW5kbGUuCiAqLwogdm9pZCBDdXJsX2V4cGlyZShzdHJ1Y3QgU2Vzc2lvbkhhbmRsZSAqZGF0YSwgbG9uZyBtaWxsaSkKIHsKQEAgLTIyNjMsMTEgKzI1NDcsMTggQEAKICAgICBpZihub3dwLT50dl9zZWMgfHwgbm93cC0+dHZfdXNlYykgewogICAgICAgLyogU2luY2UgdGhpcyBpcyBhbiBjbGVhcmVkIHRpbWUsIHdlIG11c3QgcmVtb3ZlIHRoZSBwcmV2aW91cyBlbnRyeSBmcm9tCiAgICAgICAgICB0aGUgc3BsYXkgdHJlZSAqLworICAgICAgc3RydWN0IGN1cmxfbGxpc3QgKmxpc3QgPSBkYXRhLT5zdGF0ZS50aW1lb3V0bGlzdDsKKwogICAgICAgcmMgPSBDdXJsX3NwbGF5cmVtb3ZlYnlhZGRyKG11bHRpLT50aW1ldHJlZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZGF0YS0+c3RhdGUudGltZW5vZGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm11bHRpLT50aW1ldHJlZSk7CiAgICAgICBpZihyYykKICAgICAgICAgaW5mb2YoZGF0YSwgIkludGVybmFsIGVycm9yIGNsZWFyaW5nIHNwbGF5IG5vZGUgPSAlZFxuIiwgcmMpOworCisgICAgICAvKiBmbHVzaCB0aGUgdGltZW91dCBsaXN0IHRvbyAqLworICAgICAgd2hpbGUobGlzdC0+c2l6ZSA+IDApCisgICAgICAgIEN1cmxfbGxpc3RfcmVtb3ZlKGxpc3QsIGxpc3QtPnRhaWwsIE5VTEwpOworCiAgICAgICBpbmZvZihkYXRhLCAiRXhwaXJlIGNsZWFyZWRcbiIpOwogICAgICAgbm93cC0+dHZfc2VjID0gMDsKICAgICAgIG5vd3AtPnR2X3VzZWMgPSAwOwpAQCAtMjI5Myw5ICsyNTg0LDE2IEBACiAgICAgICAgICBDb21wYXJlIGlmIHRoZSBuZXcgdGltZSBpcyBlYXJsaWVyLCBhbmQgb25seSByZW1vdmUtb2xkL2FkZC1uZXcgaWYgaXQKICAgICAgICAgIGlzLiAqLwogICAgICAgbG9uZyBkaWZmID0gY3VybHhfdHZkaWZmKHNldCwgKm5vd3ApOwotICAgICAgaWYoZGlmZiA+IDApCi0gICAgICAgIC8qIHRoZSBuZXcgZXhwaXJlIHRpbWUgd2FzIGxhdGVyIHNvIHdlIGRvbid0IGNoYW5nZSB0aGlzICovCisgICAgICBpZihkaWZmID4gMCkgeworICAgICAgICAvKiB0aGUgbmV3IGV4cGlyZSB0aW1lIHdhcyBsYXRlciBzbyBqdXN0IGFkZCBpdCB0byB0aGUgcXVldWUKKyAgICAgICAgICAgYW5kIGdldCBvdXQgKi8KKyAgICAgICAgbXVsdGlfYWRkdGltZW91dChkYXRhLT5zdGF0ZS50aW1lb3V0bGlzdCwgJnNldCk7CiAgICAgICAgIHJldHVybjsKKyAgICAgIH0KKworICAgICAgLyogdGhlIG5ldyB0aW1lIGlzIG5ld2VyIHRoYW4gdGhlIHByZXNlbnRseSBzZXQgb25lLCBzbyBhZGQgdGhlIGN1cnJlbnQKKyAgICAgICAgIHRvIHRoZSBxdWV1ZSBhbmQgdXBkYXRlIHRoZSBoZWFkICovCisgICAgICBtdWx0aV9hZGR0aW1lb3V0KGRhdGEtPnN0YXRlLnRpbWVvdXRsaXN0LCBub3dwKTsKIAogICAgICAgLyogU2luY2UgdGhpcyBpcyBhbiB1cGRhdGVkIHRpbWUsIHdlIG11c3QgcmVtb3ZlIHRoZSBwcmV2aW91cyBlbnRyeSBmcm9tCiAgICAgICAgICB0aGUgc3BsYXkgdHJlZSBmaXJzdCBhbmQgdGhlbiByZS1hZGQgdGhlIG5ldyB2YWx1ZSAqLwpAQCAtMjMwNywxMCArMjYwNSw2IEBACiAgICAgfQogCiAgICAgKm5vd3AgPSBzZXQ7Ci0jaWYgMAotICAgIGluZm9mKGRhdGEsICJFeHBpcmUgYXQgJWxkIC8gJWxkICglbGRtcykgJXBcbiIsCi0gICAgICAgICAgKGxvbmcpbm93cC0+dHZfc2VjLCAobG9uZylub3dwLT50dl91c2VjLCBtaWxsaSwgZGF0YSk7Ci0jZW5kaWYKICAgICBkYXRhLT5zdGF0ZS50aW1lbm9kZS5wYXlsb2FkID0gZGF0YTsKICAgICBtdWx0aS0+dGltZXRyZWUgPSBDdXJsX3NwbGF5aW5zZXJ0KCpub3dwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXVsdGktPnRpbWV0cmVlLApAQCAtMjQ2Miw3ICsyNzU2LDcgQEAKICAgZnByaW50ZihzdGRlcnIsICIqIE11bHRpIHN0YXR1czogJWQgaGFuZGxlcywgJWQgYWxpdmVcbiIsCiAgICAgICAgICAgbXVsdGktPm51bV9lYXN5LCBtdWx0aS0+bnVtX2FsaXZlKTsKICAgZm9yKGVhc3k9bXVsdGktPmVhc3kubmV4dDsgZWFzeSAhPSAmbXVsdGktPmVhc3k7IGVhc3kgPSBlYXN5LT5uZXh0KSB7Ci0gICAgaWYoZWFzeS0+c3RhdGUgIT0gQ1VSTE1fU1RBVEVfQ09NUExFVEVEKSB7CisgICAgaWYoZWFzeS0+c3RhdGUgPCBDVVJMTV9TVEFURV9DT01QTEVURUQpIHsKICAgICAgIC8qIG9ubHkgZGlzcGxheSBoYW5kbGVzIHRoYXQgYXJlIG5vdCBjb21wbGV0ZWQgKi8KICAgICAgIGZwcmludGYoc3RkZXJyLCAiaGFuZGxlICVwLCBzdGF0ZSAlcywgJWQgc29ja2V0c1xuIiwKICAgICAgICAgICAgICAgKHZvaWQgKillYXN5LT5lYXN5X2hhbmRsZSwKZGlmZiAtLWdpdCBhL2xpYi9tdWx0aWlmLmggYi9saWIvbXVsdGlpZi5oCmluZGV4IDc5ODU0NGUuLjc2OTE4MTggMTAwNjQ0Ci0tLSBhL2xpYi9tdWx0aWlmLmgKKysrIGIvbGliL211bHRpaWYuaApAQCAtNyw3ICs3LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDA5LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpAQCAtMjcsOCArMjcsNiBAQAogICovCiB2b2lkIEN1cmxfZXhwaXJlKHN0cnVjdCBTZXNzaW9uSGFuZGxlICpkYXRhLCBsb25nIG1pbGxpKTsKIAotdm9pZCBDdXJsX211bHRpX3JtZWFzeSh2b2lkICptdWx0aSwgQ1VSTCAqZGF0YSk7Ci0KIGJvb2wgQ3VybF9tdWx0aV9jYW5QaXBlbGluZShjb25zdCBzdHJ1Y3QgQ3VybF9tdWx0aSogbXVsdGkpOwogdm9pZCBDdXJsX211bHRpX2hhbmRsZVBpcGVCcmVhayhzdHJ1Y3QgU2Vzc2lvbkhhbmRsZSAqZGF0YSk7CiAKZGlmZiAtLWdpdCBhL2xpYi9uc3MuYyBiL2xpYi9uc3MuYwppbmRleCAwZjhlYmQ1Li42ZDNmMTJjIDEwMDY0NAotLS0gYS9saWIvbnNzLmMKKysrIGIvbGliL25zcy5jCkBAIC02Myw2ICs2Myw3IEBACiAjaW5jbHVkZSA8c2VjcG9ydC5oPgogI2luY2x1ZGUgPGNlcnRkYi5oPgogI2luY2x1ZGUgPGJhc2U2NC5oPgorI2luY2x1ZGUgPGNlcnQuaD4KIAogI2luY2x1ZGUgImN1cmxfbWVtb3J5LmgiCiAjaW5jbHVkZSAicmF3c3RyLmgiCkBAIC03OSw2ICs4MCw3IEBACiBQUkZpbGVEZXNjICpQUl9JbXBvcnRUQ1BTb2NrZXQoUFJJbnQzMiBvc2ZkKTsKIAogUFJMb2NrICogbnNzX2luaXRsb2NrID0gTlVMTDsKK1BSTG9jayAqIG5zc19jcmxsb2NrID0gTlVMTDsKIAogdm9sYXRpbGUgaW50IGluaXRpYWxpemVkID0gMDsKIApAQCAtNDExLDc4ICs0MTMsOTAgQEAKICAgcmV0dXJuIDE7CiB9CiAKLXN0YXRpYyBpbnQgbnNzX2xvYWRfY3JsKGNvbnN0IGNoYXIqIGNybGZpbGVuYW1lLCBQUkJvb2wgYXNjaWkpCisvKiBhZGQgZ2l2ZW4gQ1JMIHRvIGNhY2hlIGlmIGl0IGlzIG5vdCBhbHJlYWR5IHRoZXJlICovCitzdGF0aWMgU0VDU3RhdHVzIG5zc19jYWNoZV9jcmwoU0VDSXRlbSAqY3JsREVSKQoreworICBDRVJUQ2VydERCSGFuZGxlICpkYiA9IENFUlRfR2V0RGVmYXVsdENlcnREQigpOworICBDRVJUU2lnbmVkQ3JsICpjcmwgPSBTRUNfRmluZENybEJ5REVSQ2VydChkYiwgY3JsREVSLCAwKTsKKyAgaWYoY3JsKSB7CisgICAgLyogQ1JMIGFscmVhZHkgY2FjaGVkICovCisgICAgU0VDX0Rlc3Ryb3lDcmwoY3JsKTsKKyAgICBTRUNJVEVNX0ZyZWVJdGVtKGNybERFUiwgUFJfRkFMU0UpOworICAgIHJldHVybiBTRUNTdWNjZXNzOworICB9CisKKyAgLyogYWNxdWlyZSBsb2NrIGJlZm9yZSBjYWxsIG9mIENFUlRfQ2FjaGVDUkwoKSAqLworICBQUl9Mb2NrKG5zc19jcmxsb2NrKTsKKyAgaWYoU0VDU3VjY2VzcyAhPSBDRVJUX0NhY2hlQ1JMKGRiLCBjcmxERVIpKSB7CisgICAgLyogdW5hYmxlIHRvIGNhY2hlIENSTCAqLworICAgIFBSX1VubG9jayhuc3NfY3JsbG9jayk7CisgICAgU0VDSVRFTV9GcmVlSXRlbShjcmxERVIsIFBSX0ZBTFNFKTsKKyAgICByZXR1cm4gU0VDRmFpbHVyZTsKKyAgfQorCisgIC8qIHdlIG5lZWQgdG8gY2xlYXIgc2Vzc2lvbiBjYWNoZSwgc28gdGhhdCB0aGUgQ1JMIGNvdWxkIHRha2UgZWZmZWN0ICovCisgIFNTTF9DbGVhclNlc3Npb25DYWNoZSgpOworICBQUl9VbmxvY2sobnNzX2NybGxvY2spOworICByZXR1cm4gU0VDU3VjY2VzczsKK30KKworc3RhdGljIFNFQ1N0YXR1cyBuc3NfbG9hZF9jcmwoY29uc3QgY2hhciogY3JsZmlsZW5hbWUpCiB7CiAgIFBSRmlsZURlc2MgKmluZmlsZTsKLSAgUFJTdGF0dXMgICAgcHJzdGF0OwogICBQUkZpbGVJbmZvICBpbmZvOwotICBQUkludDMyICAgICBuYjsKLSAgaW50IHJ2OwotICBTRUNJdGVtIGNybERFUjsKLSAgQ0VSVFNpZ25lZENybCAqY3JsPU5VTEw7Ci0gIFBLMTFTbG90SW5mbyAqc2xvdD1OVUxMOworICBTRUNJdGVtIGZpbGVkYXRhID0geyAwLCBOVUxMLCAwIH07CisgIFNFQ0l0ZW0gY3JsREVSID0geyAwLCBOVUxMLCAwIH07CisgIGNoYXIgKmJvZHk7CiAKLSAgaW5maWxlID0gUFJfT3BlbihjcmxmaWxlbmFtZSxQUl9SRE9OTFksMCk7Ci0gIGlmICghaW5maWxlKSB7Ci0gICAgcmV0dXJuIDA7Ci0gIH0KLSAgY3JsREVSLmRhdGEgPSBOVUxMOwotICBwcnN0YXQgPSBQUl9HZXRPcGVuRmlsZUluZm8oaW5maWxlLCZpbmZvKTsKLSAgaWYgKHByc3RhdCE9UFJfU1VDQ0VTUykKLSAgICByZXR1cm4gMDsKLSAgaWYgKGFzY2lpKSB7Ci0gICAgU0VDSXRlbSBmaWxlZGF0YTsKLSAgICBjaGFyICphc2MsKmJvZHk7Ci0gICAgZmlsZWRhdGEuZGF0YSA9IE5VTEw7Ci0gICAgaWYgKCFTRUNJVEVNX0FsbG9jSXRlbShOVUxMLCZmaWxlZGF0YSxpbmZvLnNpemUpKQotICAgICAgcmV0dXJuIDA7Ci0gICAgbmIgPSBQUl9SZWFkKGluZmlsZSxmaWxlZGF0YS5kYXRhLGluZm8uc2l6ZSk7Ci0gICAgaWYgKG5iIT1pbmZvLnNpemUpCi0gICAgICByZXR1cm4gMDsKLSAgICBhc2MgPSAoY2hhciopZmlsZWRhdGEuZGF0YTsKLSAgICBpZiAoIWFzYykKLSAgICAgIHJldHVybiAwOworICBpbmZpbGUgPSBQUl9PcGVuKGNybGZpbGVuYW1lLCBQUl9SRE9OTFksIDApOworICBpZighaW5maWxlKQorICAgIHJldHVybiBTRUNGYWlsdXJlOwogCi0gICAgYm9keT1zdHJzdHIoYXNjLCItLS0tLUJFR0lOIik7Ci0gICAgaWYgKGJvZHkgIT0gTlVMTCkgewotICAgICAgY2hhciAqdHJhaWxlcj1OVUxMOwotICAgICAgYXNjID0gYm9keTsKLSAgICAgIGJvZHkgPSBQT1JUX1N0cmNocihhc2MsJ1xuJyk7Ci0gICAgICBpZiAoIWJvZHkpCi0gICAgICAgIGJvZHkgPSBQT1JUX1N0cmNocihhc2MsJ1xyJyk7Ci0gICAgICBpZiAoYm9keSkKLSAgICAgICAgdHJhaWxlciA9IHN0cnN0cigrK2JvZHksIi0tLS0tRU5EIik7Ci0gICAgICBpZiAodHJhaWxlciE9TlVMTCkKLSAgICAgICAgKnRyYWlsZXI9J1wwJzsKLSAgICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIGVsc2UgewotICAgICAgYm9keSA9IGFzYzsKLSAgICB9Ci0gICAgcnYgPSBBVE9CX0NvbnZlcnRBc2NpaVRvSXRlbSgmY3JsREVSLGJvZHkpOwotICAgIFBPUlRfRnJlZShmaWxlZGF0YS5kYXRhKTsKLSAgICBpZiAocnYpCi0gICAgICByZXR1cm4gMDsKLSAgfQotICBlbHNlIHsKLSAgICBpZiAoIVNFQ0lURU1fQWxsb2NJdGVtKE5VTEwsJmNybERFUixpbmZvLnNpemUpKQotICAgICAgcmV0dXJuIDA7Ci0gICAgbmIgPSBQUl9SZWFkKGluZmlsZSxjcmxERVIuZGF0YSxpbmZvLnNpemUpOwotICAgIGlmIChuYiE9aW5mby5zaXplKQotICAgICAgcmV0dXJuIDA7Ci0gIH0KKyAgaWYoUFJfU1VDQ0VTUyAhPSBQUl9HZXRPcGVuRmlsZUluZm8oaW5maWxlLCAmaW5mbykpCisgICAgZ290byBmYWlsOwogCi0gIHNsb3QgPSBQSzExX0dldEludGVybmFsS2V5U2xvdCgpOwotICBjcmwgID0gUEsxMV9JbXBvcnRDUkwoc2xvdCwmY3JsREVSLAotICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCxTRUNfQ1JMX1RZUEUsCi0gICAgICAgICAgICAgICAgICAgICAgICBOVUxMLENSTF9JTVBPUlRfREVGQVVMVF9PUFRJT05TLAotICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwoQ1JMX0RFQ09ERV9ERUZBVUxUX09QVElPTlN8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDUkxfREVDT0RFX0RPTlRfQ09QWV9ERVIpKTsKLSAgaWYgKHNsb3QpIFBLMTFfRnJlZVNsb3Qoc2xvdCk7Ci0gIGlmICghY3JsKSByZXR1cm4gMDsKLSAgU0VDX0Rlc3Ryb3lDcmwoY3JsKTsKLSAgcmV0dXJuIDE7CisgIGlmKCFTRUNJVEVNX0FsbG9jSXRlbShOVUxMLCAmZmlsZWRhdGEsIGluZm8uc2l6ZSArIC8qIHplcm8gZW5kZWQgKi8gMSkpCisgICAgZ290byBmYWlsOworCisgIGlmKGluZm8uc2l6ZSAhPSBQUl9SZWFkKGluZmlsZSwgZmlsZWRhdGEuZGF0YSwgaW5mby5zaXplKSkKKyAgICBnb3RvIGZhaWw7CisKKyAgLyogcGxhY2UgYSB0cmFpbGluZyB6ZXJvIHJpZ2h0IGFmdGVyIHRoZSB2aXNpYmxlIGRhdGEgKi8KKyAgYm9keSA9IChjaGFyKilmaWxlZGF0YS5kYXRhOworICBib2R5Wy0tZmlsZWRhdGEubGVuXSA9ICdcMCc7CisKKyAgYm9keSA9IHN0cnN0cihib2R5LCAiLS0tLS1CRUdJTiIpOworICBpZihib2R5KSB7CisgICAgLyogYXNzdW1lIEFTQ0lJICovCisgICAgY2hhciAqdHJhaWxlcjsKKyAgICBjaGFyICpiZWdpbiA9IFBPUlRfU3RyY2hyKGJvZHksICdcbicpOworICAgIGlmKCFiZWdpbikKKyAgICAgIGJlZ2luID0gUE9SVF9TdHJjaHIoYm9keSwgJ1xyJyk7CisgICAgaWYoIWJlZ2luKQorICAgICAgZ290byBmYWlsOworCisgICAgdHJhaWxlciA9IHN0cnN0cigrK2JlZ2luLCAiLS0tLS1FTkQiKTsKKyAgICBpZighdHJhaWxlcikKKyAgICAgIGdvdG8gZmFpbDsKKworICAgIC8qIHJldHJpZXZlIERFUiBmcm9tIEFTQ0lJICovCisgICAgKnRyYWlsZXIgPSAnXDAnOworICAgIGlmKEFUT0JfQ29udmVydEFzY2lpVG9JdGVtKCZjcmxERVIsIGJlZ2luKSkKKyAgICAgIGdvdG8gZmFpbDsKKworICAgIFNFQ0lURU1fRnJlZUl0ZW0oJmZpbGVkYXRhLCBQUl9GQUxTRSk7CisgIH0KKyAgZWxzZQorICAgIC8qIGFzc3VtZSBERVIgKi8KKyAgICBjcmxERVIgPSBmaWxlZGF0YTsKKworICBQUl9DbG9zZShpbmZpbGUpOworICByZXR1cm4gbnNzX2NhY2hlX2NybCgmY3JsREVSKTsKKworZmFpbDoKKyAgUFJfQ2xvc2UoaW5maWxlKTsKKyAgU0VDSVRFTV9GcmVlSXRlbSgmZmlsZWRhdGEsIFBSX0ZBTFNFKTsKKyAgcmV0dXJuIFNFQ0ZhaWx1cmU7CiB9CiAKIHN0YXRpYyBpbnQgbnNzX2xvYWRfa2V5KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgaW50IHNvY2tpbmRleCwKQEAgLTg3Nyw2ICs4OTEsNTcgQEAKICAgfQogfQogCitzdGF0aWMgQ1VSTGNvZGUgaW5pdF9uc3Moc3RydWN0IFNlc3Npb25IYW5kbGUgKmRhdGEpCit7CisgIGNoYXIgKmNlcnRfZGlyOworICBzdHJ1Y3Rfc3RhdCBzdDsKKyAgaWYoaW5pdGlhbGl6ZWQpCisgICAgcmV0dXJuIENVUkxFX09LOworCisgIC8qIEZpcnN0IHdlIGNoZWNrIGlmICRTU0xfRElSIHBvaW50cyB0byBhIHZhbGlkIGRpciAqLworICBjZXJ0X2RpciA9IGdldGVudigiU1NMX0RJUiIpOworICBpZihjZXJ0X2RpcikgeworICAgIGlmKChzdGF0KGNlcnRfZGlyLCAmc3QpICE9IDApIHx8CisgICAgICAgICghU19JU0RJUihzdC5zdF9tb2RlKSkpIHsKKyAgICAgIGNlcnRfZGlyID0gTlVMTDsKKyAgICB9CisgIH0KKworICAvKiBOb3cgd2UgY2hlY2sgaWYgdGhlIGRlZmF1bHQgbG9jYXRpb24gaXMgYSB2YWxpZCBkaXIgKi8KKyAgaWYoIWNlcnRfZGlyKSB7CisgICAgaWYoKHN0YXQoU1NMX0RJUiwgJnN0KSA9PSAwKSAmJgorICAgICAgICAoU19JU0RJUihzdC5zdF9tb2RlKSkpIHsKKyAgICAgIGNlcnRfZGlyID0gKGNoYXIgKilTU0xfRElSOworICAgIH0KKyAgfQorCisgIGlmKCFOU1NfSXNJbml0aWFsaXplZCgpKSB7CisgICAgU0VDU3RhdHVzIHJ2OworICAgIGluaXRpYWxpemVkID0gMTsKKyAgICBpbmZvZihkYXRhLCAiSW5pdGlhbGl6aW5nIE5TUyB3aXRoIGNlcnRwYXRoOiAlc1xuIiwKKyAgICAgICAgICBjZXJ0X2RpciA/IGNlcnRfZGlyIDogIm5vbmUiKTsKKyAgICBpZighY2VydF9kaXIpIHsKKyAgICAgIHJ2ID0gTlNTX05vREJfSW5pdChOVUxMKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICBjaGFyICpjZXJ0cGF0aCA9CisgICAgICAgIFBSX3NtcHJpbnRmKCIlcyVzIiwgTlNTX1ZlcnNpb25DaGVjaygiMy4xMi4wIikgPyAic3FsOiIgOiAiIiwgY2VydF9kaXIpOworICAgICAgcnYgPSBOU1NfSW5pdGlhbGl6ZShjZXJ0cGF0aCwgIiIsICIiLCAiIiwgTlNTX0lOSVRfUkVBRE9OTFkpOworICAgICAgUFJfc21wcmludGZfZnJlZShjZXJ0cGF0aCk7CisgICAgfQorICAgIGlmKHJ2ICE9IFNFQ1N1Y2Nlc3MpIHsKKyAgICAgIGluZm9mKGRhdGEsICJVbmFibGUgdG8gaW5pdGlhbGl6ZSBOU1MgZGF0YWJhc2VcbiIpOworICAgICAgaW5pdGlhbGl6ZWQgPSAwOworICAgICAgcmV0dXJuIENVUkxFX1NTTF9DQUNFUlRfQkFERklMRTsKKyAgICB9CisgIH0KKworICBpZihudW1fZW5hYmxlZF9jaXBoZXJzKCkgPT0gMCkKKyAgICBOU1NfU2V0RG9tZXN0aWNQb2xpY3koKTsKKworICByZXR1cm4gQ1VSTEVfT0s7Cit9CisKIC8qKgogICogR2xvYmFsIFNTTCBpbml0CiAgKgpAQCAtODg5LDYgKzk1NCw3IEBACiAgIGlmIChuc3NfaW5pdGxvY2sgPT0gTlVMTCkgewogICAgIFBSX0luaXQoUFJfVVNFUl9USFJFQUQsIFBSX1BSSU9SSVRZX05PUk1BTCwgMjU2KTsKICAgICBuc3NfaW5pdGxvY2sgPSBQUl9OZXdMb2NrKCk7CisgICAgbnNzX2NybGxvY2sgPSBQUl9OZXdMb2NrKCk7CiAgIH0KIAogICAvKiBXZSB3aWxsIGFjdHVhbGx5IGluaXRpYWxpemUgTlNTIGxhdGVyICovCkBAIC04OTYsNiArOTYyLDIxIEBACiAgIHJldHVybiAxOwogfQogCitDVVJMY29kZSBDdXJsX25zc19mb3JjZV9pbml0KHN0cnVjdCBTZXNzaW9uSGFuZGxlICpkYXRhKQoreworICBDVVJMY29kZSBydjsKKyAgaWYoIW5zc19pbml0bG9jaykgeworICAgIGZhaWxmKGRhdGEsICJ1bmFibGUgdG8gaW5pdGlhbGl6ZSBOU1MsIGN1cmxfZ2xvYmFsX2luaXQoKSBzaG91bGQgaGF2ZSBiZWVuICIKKyAgICAgICAgICAgICAgICAiY2FsbGVkIHdpdGggQ1VSTF9HTE9CQUxfU1NMIG9yIENVUkxfR0xPQkFMX0FMTCIpOworICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOworICB9CisKKyAgUFJfTG9jayhuc3NfaW5pdGxvY2spOworICBydiA9IGluaXRfbnNzKGRhdGEpOworICBQUl9VbmxvY2sobnNzX2luaXRsb2NrKTsKKyAgcmV0dXJuIHJ2OworfQorCiAvKiBHbG9iYWwgY2xlYW51cCAqLwogdm9pZCBDdXJsX25zc19jbGVhbnVwKHZvaWQpCiB7CkBAIC05MTgsNiArOTk5LDcgQEAKICAgUFJfVW5sb2NrKG5zc19pbml0bG9jayk7CiAKICAgUFJfRGVzdHJveUxvY2sobnNzX2luaXRsb2NrKTsKKyAgUFJfRGVzdHJveUxvY2sobnNzX2NybGxvY2spOwogICBuc3NfaW5pdGxvY2sgPSBOVUxMOwogCiAgIGluaXRpYWxpemVkID0gMDsKQEAgLTEwMTAsNiArMTA5Miw5IEBACiAgIH0KIH0KIAorc3RhdGljIEN1cmxfcmVjdiBuc3NfcmVjdjsKK3N0YXRpYyBDdXJsX3NlbmQgbnNzX3NlbmQ7CisKIENVUkxjb2RlIEN1cmxfbnNzX2Nvbm5lY3Qoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBpbnQgc29ja2luZGV4KQogewogICBQUkludDMyIGVycjsKQEAgLTEwMjAsMTUgKzExMDUsMTIgQEAKICAgc3RydWN0IFNlc3Npb25IYW5kbGUgKmRhdGEgPSBjb25uLT5kYXRhOwogICBjdXJsX3NvY2tldF90IHNvY2tmZCA9IGNvbm4tPnNvY2tbc29ja2luZGV4XTsKICAgc3RydWN0IHNzbF9jb25uZWN0X2RhdGEgKmNvbm5zc2wgPSAmY29ubi0+c3NsW3NvY2tpbmRleF07Ci0gIFNFQ1N0YXR1cyBydjsKLSAgY2hhciAqY2VydERpciA9IE5VTEw7CiAgIGludCBjdXJsZXJyOwogICBjb25zdCBpbnQgKmNpcGhlcl90b19lbmFibGU7CiAgIFBSU29ja2V0T3B0aW9uRGF0YSBzb2NrX29wdDsKKyAgbG9uZyB0aW1lX2xlZnQ7CiAgIFBSVWludDMyIHRpbWVvdXQ7CiAKLSAgY3VybGVyciA9IENVUkxFX1NTTF9DT05ORUNUX0VSUk9SOwotCiAgIGlmIChjb25uc3NsLT5zdGF0ZSA9PSBzc2xfY29ubmVjdGlvbl9jb21wbGV0ZSkKICAgICByZXR1cm4gQ1VSTEVfT0s7CiAKQEAgLTEwNDIsNzYgKzExMjQsMzYgQEAKIAogICAvKiBGSVhNRS4gTlNTIGRvZXNuJ3Qgc3VwcG9ydCBtdWx0aXBsZSBkYXRhYmFzZXMgb3BlbiBhdCB0aGUgc2FtZSB0aW1lLiAqLwogICBQUl9Mb2NrKG5zc19pbml0bG9jayk7Ci0gIGlmKCFpbml0aWFsaXplZCkgewotICAgIHN0cnVjdF9zdGF0IHN0OworICBjdXJsZXJyID0gaW5pdF9uc3MoY29ubi0+ZGF0YSk7CisgIGlmKENVUkxFX09LICE9IGN1cmxlcnIpIHsKKyAgICBQUl9VbmxvY2sobnNzX2luaXRsb2NrKTsKKyAgICBnb3RvIGVycm9yOworICB9CiAKLSAgICAvKiBGaXJzdCB3ZSBjaGVjayBpZiAkU1NMX0RJUiBwb2ludHMgdG8gYSB2YWxpZCBkaXIgKi8KLSAgICBjZXJ0RGlyID0gZ2V0ZW52KCJTU0xfRElSIik7Ci0gICAgaWYoY2VydERpcikgewotICAgICAgaWYoKHN0YXQoY2VydERpciwgJnN0KSAhPSAwKSB8fAotICAgICAgICAgKCFTX0lTRElSKHN0LnN0X21vZGUpKSkgewotICAgICAgICBjZXJ0RGlyID0gTlVMTDsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvKiBOb3cgd2UgY2hlY2sgaWYgdGhlIGRlZmF1bHQgbG9jYXRpb24gaXMgYSB2YWxpZCBkaXIgKi8KLSAgICBpZighY2VydERpcikgewotICAgICAgaWYoKHN0YXQoU1NMX0RJUiwgJnN0KSA9PSAwKSAmJgotICAgICAgICAgKFNfSVNESVIoc3Quc3RfbW9kZSkpKSB7Ci0gICAgICAgIGNlcnREaXIgPSAoY2hhciAqKVNTTF9ESVI7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgaWYgKCFOU1NfSXNJbml0aWFsaXplZCgpKSB7Ci0gICAgICBpbml0aWFsaXplZCA9IDE7Ci0gICAgICBpbmZvZihjb25uLT5kYXRhLCAiSW5pdGlhbGl6aW5nIE5TUyB3aXRoIGNlcnRwYXRoOiAlc1xuIiwKLSAgICAgICAgICAgIGNlcnREaXIgPyBjZXJ0RGlyIDogIm5vbmUiKTsKLSAgICAgIGlmKCFjZXJ0RGlyKSB7Ci0gICAgICAgIHJ2ID0gTlNTX05vREJfSW5pdChOVUxMKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgewotICAgICAgICBjaGFyICpjZXJ0cGF0aCA9IFBSX3NtcHJpbnRmKCIlcyVzIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOU1NfVmVyc2lvbkNoZWNrKCIzLjEyLjAiKSA/ICJzcWw6IiA6ICIiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlcnREaXIpOwotICAgICAgICBydiA9IE5TU19Jbml0aWFsaXplKGNlcnRwYXRoLCAiIiwgIiIsICIiLCBOU1NfSU5JVF9SRUFET05MWSk7Ci0gICAgICAgIFBSX3NtcHJpbnRmX2ZyZWUoY2VydHBhdGgpOwotICAgICAgfQotICAgICAgaWYocnYgIT0gU0VDU3VjY2VzcykgewotICAgICAgICBpbmZvZihjb25uLT5kYXRhLCAiVW5hYmxlIHRvIGluaXRpYWxpemUgTlNTIGRhdGFiYXNlXG4iKTsKLSAgICAgICAgY3VybGVyciA9IENVUkxFX1NTTF9DQUNFUlRfQkFERklMRTsKLSAgICAgICAgaW5pdGlhbGl6ZWQgPSAwOwotICAgICAgICBQUl9VbmxvY2sobnNzX2luaXRsb2NrKTsKLSAgICAgICAgZ290byBlcnJvcjsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBpZihudW1fZW5hYmxlZF9jaXBoZXJzKCkgPT0gMCkKLSAgICAgIE5TU19TZXREb21lc3RpY1BvbGljeSgpOworICBjdXJsZXJyID0gQ1VSTEVfU1NMX0NPTk5FQ1RfRVJST1I7CiAKICNpZmRlZiBIQVZFX1BLMTFfQ1JFQVRFR0VORVJJQ09CSkVDVAotICAgIGlmKCFtb2QpIHsKLSAgICAgIGNoYXIgKmNvbmZpZ3N0cmluZyA9IGFwcmludGYoImxpYnJhcnk9JXMgbmFtZT1QRU0iLCBwZW1fbGlicmFyeSk7Ci0gICAgICBpZighY29uZmlnc3RyaW5nKSB7Ci0gICAgICAgIFBSX1VubG9jayhuc3NfaW5pdGxvY2spOwotICAgICAgICBnb3RvIGVycm9yOwotICAgICAgfQotICAgICAgbW9kID0gU0VDTU9EX0xvYWRVc2VyTW9kdWxlKGNvbmZpZ3N0cmluZywgTlVMTCwgUFJfRkFMU0UpOwotICAgICAgZnJlZShjb25maWdzdHJpbmcpOwotCi0gICAgICBpZighbW9kIHx8ICFtb2QtPmxvYWRlZCkgewotICAgICAgICBpZihtb2QpIHsKLSAgICAgICAgICBTRUNNT0RfRGVzdHJveU1vZHVsZShtb2QpOwotICAgICAgICAgIG1vZCA9IE5VTEw7Ci0gICAgICAgIH0KLSAgICAgICAgaW5mb2YoZGF0YSwgIldBUk5JTkc6IGZhaWxlZCB0byBsb2FkIE5TUyBQRU0gbGlicmFyeSAlcy4gVXNpbmcgIgotICAgICAgICAgICAgICAiT3BlblNTTCBQRU0gY2VydGlmaWNhdGVzIHdpbGwgbm90IHdvcmsuXG4iLCBwZW1fbGlicmFyeSk7Ci0gICAgICB9CisgIGlmKCFtb2QpIHsKKyAgICBjaGFyICpjb25maWdzdHJpbmcgPSBhcHJpbnRmKCJsaWJyYXJ5PSVzIG5hbWU9UEVNIiwgcGVtX2xpYnJhcnkpOworICAgIGlmKCFjb25maWdzdHJpbmcpIHsKKyAgICAgIFBSX1VubG9jayhuc3NfaW5pdGxvY2spOworICAgICAgZ290byBlcnJvcjsKICAgICB9CisgICAgbW9kID0gU0VDTU9EX0xvYWRVc2VyTW9kdWxlKGNvbmZpZ3N0cmluZywgTlVMTCwgUFJfRkFMU0UpOworICAgIGZyZWUoY29uZmlnc3RyaW5nKTsKKworICAgIGlmKCFtb2QgfHwgIW1vZC0+bG9hZGVkKSB7CisgICAgICBpZihtb2QpIHsKKyAgICAgICAgU0VDTU9EX0Rlc3Ryb3lNb2R1bGUobW9kKTsKKyAgICAgICAgbW9kID0gTlVMTDsKKyAgICAgIH0KKyAgICAgIGluZm9mKGRhdGEsICJXQVJOSU5HOiBmYWlsZWQgdG8gbG9hZCBOU1MgUEVNIGxpYnJhcnkgJXMuIFVzaW5nICIKKyAgICAgICAgICAgICJPcGVuU1NMIFBFTSBjZXJ0aWZpY2F0ZXMgd2lsbCBub3Qgd29yay5cbiIsIHBlbV9saWJyYXJ5KTsKKyAgICB9CisgIH0KICNlbmRpZgogCi0gICAgUEsxMV9TZXRQYXNzd29yZEZ1bmMobnNzX2dldF9wYXNzd29yZCk7Ci0KLSAgfQorICBQSzExX1NldFBhc3N3b3JkRnVuYyhuc3NfZ2V0X3Bhc3N3b3JkKTsKICAgUFJfVW5sb2NrKG5zc19pbml0bG9jayk7CiAKICAgbW9kZWwgPSBQUl9OZXdUQ1BTb2NrZXQoKTsKQEAgLTEyNDMsOCArMTI4NSw3IEBACiAgICAgICAgIGRhdGEtPnNldC5zc2wuQ0FwYXRoID8gZGF0YS0+c2V0LnNzbC5DQXBhdGggOiAibm9uZSIpOwogCiAgIGlmIChkYXRhLT5zZXQuc3NsLkNSTGZpbGUpIHsKLSAgICBpbnQgcmMgPSBuc3NfbG9hZF9jcmwoZGF0YS0+c2V0LnNzbC5DUkxmaWxlLCBQUl9GQUxTRSk7Ci0gICAgaWYgKCFyYykgeworICAgIGlmKFNFQ1N1Y2Nlc3MgIT0gbnNzX2xvYWRfY3JsKGRhdGEtPnNldC5zc2wuQ1JMZmlsZSkpIHsKICAgICAgIGN1cmxlcnIgPSBDVVJMRV9TU0xfQ1JMX0JBREZJTEU7CiAgICAgICBnb3RvIGVycm9yOwogICAgIH0KQEAgLTEzMDIsOCArMTM0MywxNSBAQAogCiAgIFNTTF9TZXRVUkwoY29ubnNzbC0+aGFuZGxlLCBjb25uLT5ob3N0Lm5hbWUpOwogCisgIC8qIGNoZWNrIHRpbWVvdXQgc2l0dWF0aW9uICovCisgIHRpbWVfbGVmdCA9IEN1cmxfdGltZWxlZnQoY29ubiwgTlVMTCwgVFJVRSk7CisgIGlmKHRpbWVfbGVmdCA8IDBMKSB7CisgICAgZmFpbGYoZGF0YSwgInRpbWVkIG91dCBiZWZvcmUgU1NMIGhhbmRzaGFrZSIpOworICAgIGdvdG8gZXJyb3I7CisgIH0KKyAgdGltZW91dCA9IFBSX01pbGxpc2Vjb25kc1RvSW50ZXJ2YWwoKFBSVWludDMyKSB0aW1lX2xlZnQpOworCiAgIC8qIEZvcmNlIHRoZSBoYW5kc2hha2Ugbm93ICovCi0gIHRpbWVvdXQgPSBQUl9NaWxsaXNlY29uZHNUb0ludGVydmFsKChQUlVpbnQzMilDdXJsX3RpbWVsZWZ0KGNvbm4sIE5VTEwsIFRSVUUpKTsKICAgaWYoU1NMX0ZvcmNlSGFuZHNoYWtlV2l0aFRpbWVvdXQoY29ubnNzbC0+aGFuZGxlLCB0aW1lb3V0KSAhPSBTRUNTdWNjZXNzKSB7CiAgICAgaWYoY29ubi0+ZGF0YS0+c2V0LnNzbC5jZXJ0dmVyaWZ5cmVzdWx0ID09IFNTTF9FUlJPUl9CQURfQ0VSVF9ET01BSU4pCiAgICAgICBjdXJsZXJyID0gQ1VSTEVfUEVFUl9GQUlMRURfVkVSSUZJQ0FUSU9OOwpAQCAtMTMxMyw2ICsxMzYxLDggQEAKICAgfQogCiAgIGNvbm5zc2wtPnN0YXRlID0gc3NsX2Nvbm5lY3Rpb25fY29tcGxldGU7CisgIGNvbm4tPnJlY3Zbc29ja2luZGV4XSA9IG5zc19yZWN2OworICBjb25uLT5zZW5kW3NvY2tpbmRleF0gPSBuc3Nfc2VuZDsKIAogICBkaXNwbGF5X2Nvbm5faW5mbyhjb25uLCBjb25uc3NsLT5oYW5kbGUpOwogCkBAIC0xMzY1LDEyICsxNDE1LDExIEBACiAgIHJldHVybiBjdXJsZXJyOwogfQogCi0vKiBmb3IgZG9jdW1lbnRhdGlvbiBzZWUgQ3VybF9zc2xfc2VuZCgpIGluIHNzbGdlbi5oICovCi1pbnQgQ3VybF9uc3Nfc2VuZChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sICAvKiBjb25uZWN0aW9uIGRhdGEgKi8KLSAgICAgICAgICAgICAgICAgIGludCBzb2NraW5kZXgsICAgICAgICAgICAgIC8qIHNvY2tldGluZGV4ICovCi0gICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICptZW0sICAgICAgICAgICAvKiBzZW5kIHRoaXMgZGF0YSAqLwotICAgICAgICAgICAgICAgICAgc2l6ZV90IGxlbiwgICAgICAgICAgICAgICAgLyogYW1vdW50IHRvIHdyaXRlICovCi0gICAgICAgICAgICAgICAgICBpbnQgKmN1cmxjb2RlKQorc3RhdGljIHNzaXplX3QgbnNzX3NlbmQoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCAgLyogY29ubmVjdGlvbiBkYXRhICovCisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc29ja2luZGV4LCAgICAgICAgICAgICAvKiBzb2NrZXRpbmRleCAqLworICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqbWVtLCAgICAgICAgICAgLyogc2VuZCB0aGlzIGRhdGEgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBsZW4sICAgICAgICAgICAgICAgIC8qIGFtb3VudCB0byB3cml0ZSAqLworICAgICAgICAgICAgICAgICAgICAgICAgQ1VSTGNvZGUgKmN1cmxjb2RlKQogewogICBpbnQgcmM7CiAKQEAgLTEzNzksNyArMTQyOCw3IEBACiAgIGlmKHJjIDwgMCkgewogICAgIFBSSW50MzIgZXJyID0gUFJfR2V0RXJyb3IoKTsKICAgICBpZihlcnIgPT0gUFJfV09VTERfQkxPQ0tfRVJST1IpCi0gICAgICAqY3VybGNvZGUgPSAtMTsgLyogRVdPVUxEQkxPQ0sgKi8KKyAgICAgICpjdXJsY29kZSA9IENVUkxFX0FHQUlOOwogICAgIGVsc2UgaWYoaGFuZGxlX2NjX2Vycm9yKGVyciwgY29ubi0+ZGF0YSkpCiAgICAgICAqY3VybGNvZGUgPSBDVVJMRV9TU0xfQ0VSVFBST0JMRU07CiAgICAgZWxzZSB7CkBAIC0xMzkxLDEyICsxNDQwLDExIEBACiAgIHJldHVybiByYzsgLyogbnVtYmVyIG9mIGJ5dGVzICovCiB9CiAKLS8qIGZvciBkb2N1bWVudGF0aW9uIHNlZSBDdXJsX3NzbF9yZWN2KCkgaW4gc3NsZ2VuLmggKi8KLXNzaXplX3QgQ3VybF9uc3NfcmVjdihzdHJ1Y3QgY29ubmVjdGRhdGEgKiBjb25uLCAvKiBjb25uZWN0aW9uIGRhdGEgKi8KLSAgICAgICAgICAgICAgICAgICAgICBpbnQgbnVtLCAgICAgICAgICAgICAgICAgICAvKiBzb2NrZXRpbmRleCAqLwotICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmJ1ZiwgICAgICAgICAgICAgICAgIC8qIHN0b3JlIHJlYWQgZGF0YSBoZXJlICovCi0gICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGJ1ZmZlcnNpemUsICAgICAgICAgLyogbWF4IGFtb3VudCB0byByZWFkICovCi0gICAgICAgICAgICAgICAgICAgICAgaW50ICpjdXJsY29kZSkKK3N0YXRpYyBzc2l6ZV90IG5zc19yZWN2KHN0cnVjdCBjb25uZWN0ZGF0YSAqIGNvbm4sIC8qIGNvbm5lY3Rpb24gZGF0YSAqLworICAgICAgICAgICAgICAgICAgICAgICAgaW50IG51bSwgICAgICAgICAgICAgICAgICAgLyogc29ja2V0aW5kZXggKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmJ1ZiwgICAgICAgICAgICAgICAgIC8qIHN0b3JlIHJlYWQgZGF0YSBoZXJlICovCisgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgYnVmZmVyc2l6ZSwgICAgICAgICAvKiBtYXggYW1vdW50IHRvIHJlYWQgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIENVUkxjb2RlICpjdXJsY29kZSkKIHsKICAgc3NpemVfdCBucmVhZDsKIApAQCAtMTQwNiw3ICsxNDU0LDcgQEAKICAgICBQUkludDMyIGVyciA9IFBSX0dldEVycm9yKCk7CiAKICAgICBpZihlcnIgPT0gUFJfV09VTERfQkxPQ0tfRVJST1IpCi0gICAgICAqY3VybGNvZGUgPSAtMTsgLyogRVdPVUxEQkxPQ0sgKi8KKyAgICAgICpjdXJsY29kZSA9IENVUkxFX0FHQUlOOwogICAgIGVsc2UgaWYoaGFuZGxlX2NjX2Vycm9yKGVyciwgY29ubi0+ZGF0YSkpCiAgICAgICAqY3VybGNvZGUgPSBDVVJMRV9TU0xfQ0VSVFBST0JMRU07CiAgICAgZWxzZSB7CkBAIC0xNDIyLDQgKzE0NzAsMTIgQEAKIHsKICAgcmV0dXJuIHNucHJpbnRmKGJ1ZmZlciwgc2l6ZSwgIk5TUy8lcyIsIE5TU19WRVJTSU9OKTsKIH0KKworaW50IEN1cmxfbnNzX3NlZWQoc3RydWN0IFNlc3Npb25IYW5kbGUgKmRhdGEpCit7CisgIC8qIFRPRE86IGltcGxlbWVudD8gKi8KKyAgKHZvaWQpIGRhdGE7CisgIHJldHVybiAwOworfQorCiAjZW5kaWYgLyogVVNFX05TUyAqLwpkaWZmIC0tZ2l0IGEvbGliL25zc2cuaCBiL2xpYi9uc3NnLmgKaW5kZXggMzA5YzNkNi4uZjljYzQ2YSAxMDA2NDQKLS0tIGEvbGliL25zc2cuaAorKysgYi9saWIvbnNzZy5oCkBAIC00MiwyNCArNDIsMTMgQEAKIGludCBDdXJsX25zc19pbml0KHZvaWQpOwogdm9pZCBDdXJsX25zc19jbGVhbnVwKHZvaWQpOwogCi0vKiBmb3IgZG9jdW1lbnRhdGlvbiBzZWUgQ3VybF9zc2xfc2VuZCgpIGluIHNzbGdlbi5oICovCi1pbnQgQ3VybF9uc3Nfc2VuZChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCi0gICAgICAgICAgICAgICAgICBpbnQgc29ja2luZGV4LAotICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqbWVtLAotICAgICAgICAgICAgICAgICAgc2l6ZV90IGxlbiwKLSAgICAgICAgICAgICAgICAgIGludCAqY3VybGNvZGUpOwotCi0vKiBmb3IgZG9jdW1lbnRhdGlvbiBzZWUgQ3VybF9zc2xfcmVjdigpIGluIHNzbGdlbi5oICovCi1zc2l6ZV90IEN1cmxfbnNzX3JlY3Yoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCAvKiBjb25uZWN0aW9uIGRhdGEgKi8KLSAgICAgICAgICAgICAgICAgICAgICBpbnQgbnVtLCAgICAgICAgICAgICAgICAgIC8qIHNvY2tldGluZGV4ICovCi0gICAgICAgICAgICAgICAgICAgICAgY2hhciAqYnVmLCAgICAgICAgICAgICAgICAvKiBzdG9yZSByZWFkIGRhdGEgaGVyZSAqLwotICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBidWZmZXJzaXplLCAgICAgICAgLyogbWF4IGFtb3VudCB0byByZWFkICovCi0gICAgICAgICAgICAgICAgICAgICAgaW50ICpjdXJsY29kZSk7Ci0KIHNpemVfdCBDdXJsX25zc192ZXJzaW9uKGNoYXIgKmJ1ZmZlciwgc2l6ZV90IHNpemUpOwogaW50IEN1cmxfbnNzX2NoZWNrX2N4bihzdHJ1Y3QgY29ubmVjdGRhdGEgKmN4bik7CiBpbnQgQ3VybF9uc3Nfc2VlZChzdHJ1Y3QgU2Vzc2lvbkhhbmRsZSAqZGF0YSk7CiAKKy8qIGluaXRpYWxpemUgTlNTIGxpYnJhcnkgaWYgbm90IGFscmVhZHkgKi8KK0NVUkxjb2RlIEN1cmxfbnNzX2ZvcmNlX2luaXQoc3RydWN0IFNlc3Npb25IYW5kbGUgKmRhdGEpOworCiAvKiBBUEkgc2V0dXAgZm9yIE5TUyAqLwogI2RlZmluZSBjdXJsc3NsX2luaXQgQ3VybF9uc3NfaW5pdAogI2RlZmluZSBjdXJsc3NsX2NsZWFudXAgQ3VybF9uc3NfY2xlYW51cApAQCAtNzQsOCArNjMsNiBAQAogI2RlZmluZSBjdXJsc3NsX3NldF9lbmdpbmUoeCx5KSAoeD14LCB5PXksIENVUkxFX0ZBSUxFRF9JTklUKQogI2RlZmluZSBjdXJsc3NsX3NldF9lbmdpbmVfZGVmYXVsdCh4KSAoeD14LCBDVVJMRV9GQUlMRURfSU5JVCkKICNkZWZpbmUgY3VybHNzbF9lbmdpbmVzX2xpc3QoeCkgKHg9eCwgKHN0cnVjdCBjdXJsX3NsaXN0ICopTlVMTCkKLSNkZWZpbmUgY3VybHNzbF9zZW5kIEN1cmxfbnNzX3NlbmQKLSNkZWZpbmUgY3VybHNzbF9yZWN2IEN1cmxfbnNzX3JlY3YKICNkZWZpbmUgY3VybHNzbF92ZXJzaW9uIEN1cmxfbnNzX3ZlcnNpb24KICNkZWZpbmUgY3VybHNzbF9jaGVja19jeG4oeCkgQ3VybF9uc3NfY2hlY2tfY3huKHgpCiAjZGVmaW5lIGN1cmxzc2xfZGF0YV9wZW5kaW5nKHgseSkgKHg9eCwgeT15LCAwKQpkaWZmIC0tZ2l0IGEvbGliL29wZW5sZGFwLmMgYi9saWIvb3BlbmxkYXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZDVkYjRhCi0tLSAvZGV2L251bGwKKysrIGIvbGliL29wZW5sZGFwLmMKQEAgLTAsMCArMSw2MzUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAqICBQcm9qZWN0ICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgKiAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICogICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAqICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMCwgSG93YXJkIENodSwgPGh5Y0BvcGVubGRhcC5vcmc+CisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisgKgorICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSAic2V0dXAuaCIKKworI2lmICFkZWZpbmVkKENVUkxfRElTQUJMRV9MREFQKSAmJiBkZWZpbmVkKFVTRV9PUEVOTERBUCkKKworLyoKKyAqIE5vdGljZSB0aGF0IFVTRV9PUEVOTERBUCBpcyBvbmx5IGEgc291cmNlIGNvZGUgc2VsZWN0aW9uIHN3aXRjaC4gV2hlbgorICogbGliY3VybCBpcyBidWlsdCB3aXRoIFVTRV9PUEVOTERBUCBkZWZpbmVkIHRoZSBsaWJjdXJsIHNvdXJjZSBjb2RlIHRoYXQKKyAqIGdldHMgY29tcGlsZWQgaXMgdGhlIGNvZGUgZnJvbSBvcGVubGRhcC5jLCBvdGhlcndpc2UgdGhlIGNvZGUgdGhhdCBnZXRzCisgKiBjb21waWxlZCBpcyB0aGUgY29kZSBmcm9tIGxkYXAuYy4KKyAqCisgKiBXaGVuIFVTRV9PUEVOTERBUCBpcyBkZWZpbmVkIGEgcmVjZW50IHZlcnNpb24gb2YgdGhlIE9wZW5MREFQIGxpYnJhcnkKKyAqIG1pZ2h0IGJlIHJlcXVpcmVkIGZvciBjb21waWxhdGlvbiBhbmQgcnVudGltZS4gSW4gb3JkZXIgdG8gdXNlIGFuY2llbnQKKyAqIE9wZW5MREFQIGxpYnJhcnkgdmVyc2lvbnMsIFVTRV9PUEVOTERBUCBzaGFsbCBub3QgYmUgZGVmaW5lZC4KKyAqLworCisjaW5jbHVkZSA8bGRhcC5oPgorCisjaW5jbHVkZSAidXJsZGF0YS5oIgorI2luY2x1ZGUgPGN1cmwvY3VybC5oPgorI2luY2x1ZGUgInNlbmRmLmgiCisjaW5jbHVkZSAic3NsZ2VuLmgiCisjaW5jbHVkZSAidHJhbnNmZXIuaCIKKyNpbmNsdWRlICJjdXJsX2xkYXAuaCIKKyNpbmNsdWRlICJjdXJsX21lbW9yeS5oIgorI2luY2x1ZGUgImN1cmxfYmFzZTY0LmgiCisKKyNkZWZpbmUgX01QUklOVEZfUkVQTEFDRSAvKiB1c2Ugb3VyIGZ1bmN0aW9ucyBvbmx5ICovCisjaW5jbHVkZSA8Y3VybC9tcHJpbnRmLmg+CisKKyNpbmNsdWRlICJtZW1kZWJ1Zy5oIgorCisjaWZuZGVmIF9MREFQX1BWVF9ICitleHRlcm4gaW50IGxkYXBfcHZ0X3VybF9zY2hlbWUycHJvdG8oY29uc3QgY2hhciAqKTsKK2V4dGVybiBpbnQgbGRhcF9pbml0X2ZkKGJlcl9zb2NrZXRfdCBmZCwgaW50IHByb3RvLCBjb25zdCBjaGFyICp1cmwsIExEQVAgKipsZCk7CisjZW5kaWYKKworc3RhdGljIENVUkxjb2RlIGxkYXBfc2V0dXAoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uKTsKK3N0YXRpYyBDVVJMY29kZSBsZGFwX2RvKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgYm9vbCAqZG9uZSk7CitzdGF0aWMgQ1VSTGNvZGUgbGRhcF9kb25lKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgQ1VSTGNvZGUsIGJvb2wpOworc3RhdGljIENVUkxjb2RlIGxkYXBfY29ubmVjdChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGJvb2wgKmRvbmUpOworc3RhdGljIENVUkxjb2RlIGxkYXBfY29ubmVjdGluZyhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGJvb2wgKmRvbmUpOworc3RhdGljIENVUkxjb2RlIGxkYXBfZGlzY29ubmVjdChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pOworCitzdGF0aWMgQ3VybF9yZWN2IGxkYXBfcmVjdjsKKworLyoKKyAqIExEQVAgcHJvdG9jb2wgaGFuZGxlci4KKyAqLworCitjb25zdCBzdHJ1Y3QgQ3VybF9oYW5kbGVyIEN1cmxfaGFuZGxlcl9sZGFwID0geworICAiTERBUCIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNjaGVtZSAqLworICBsZGFwX3NldHVwLCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNldHVwX2Nvbm5lY3Rpb24gKi8KKyAgbGRhcF9kbywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb19pdCAqLworICBsZGFwX2RvbmUsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRvbmUgKi8KKyAgWkVST19OVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb19tb3JlICovCisgIGxkYXBfY29ubmVjdCwgICAgICAgICAgICAgICAgICAgICAgICAgLyogY29ubmVjdF9pdCAqLworICBsZGFwX2Nvbm5lY3RpbmcsICAgICAgICAgICAgICAgICAgICAgIC8qIGNvbm5lY3RpbmcgKi8KKyAgWkVST19OVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb2luZyAqLworICBaRVJPX05VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHByb3RvX2dldHNvY2sgKi8KKyAgWkVST19OVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb2luZ19nZXRzb2NrICovCisgIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcGVyZm9ybV9nZXRzb2NrICovCisgIGxkYXBfZGlzY29ubmVjdCwgICAgICAgICAgICAgICAgICAgICAgLyogZGlzY29ubmVjdCAqLworICBQT1JUX0xEQVAsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRlZnBvcnQgKi8KKyAgUFJPVF9MREFQICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBwcm90b2NvbCAqLworfTsKKworI2lmZGVmIFVTRV9TU0wKKy8qCisgKiBMREFQUyBwcm90b2NvbCBoYW5kbGVyLgorICovCisKK2NvbnN0IHN0cnVjdCBDdXJsX2hhbmRsZXIgQ3VybF9oYW5kbGVyX2xkYXBzID0geworICAiTERBUFMiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNjaGVtZSAqLworICBsZGFwX3NldHVwLCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNldHVwX2Nvbm5lY3Rpb24gKi8KKyAgbGRhcF9kbywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb19pdCAqLworICBsZGFwX2RvbmUsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRvbmUgKi8KKyAgWkVST19OVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb19tb3JlICovCisgIGxkYXBfY29ubmVjdCwgICAgICAgICAgICAgICAgICAgICAgICAgLyogY29ubmVjdF9pdCAqLworICBsZGFwX2Nvbm5lY3RpbmcsICAgICAgICAgICAgICAgICAgICAgIC8qIGNvbm5lY3RpbmcgKi8KKyAgWkVST19OVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb2luZyAqLworICBaRVJPX05VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHByb3RvX2dldHNvY2sgKi8KKyAgWkVST19OVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb2luZ19nZXRzb2NrICovCisgIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcGVyZm9ybV9nZXRzb2NrICovCisgIGxkYXBfZGlzY29ubmVjdCwgICAgICAgICAgICAgICAgICAgICAgLyogZGlzY29ubmVjdCAqLworICBQT1JUX0xEQVBTLCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRlZnBvcnQgKi8KKyAgUFJPVF9MREFQIHwgUFJPVF9TU0wgICAgICAgICAgICAgICAgICAvKiBwcm90b2NvbCAqLworfTsKKyNlbmRpZgorCitzdGF0aWMgY29uc3QgY2hhciAqdXJsX2VycnNbXSA9IHsKKyAgInN1Y2Nlc3MiLAorICAib3V0IG9mIG1lbW9yeSIsCisgICJiYWQgcGFyYW1ldGVyIiwKKyAgInVucmVjb2duaXplZCBzY2hlbWUiLAorICAidW5iYWxhbmNlZCBkZWxpbWl0ZXIiLAorICAiYmFkIFVSTCIsCisgICJiYWQgaG9zdCBvciBwb3J0IiwKKyAgImJhZCBvciBtaXNzaW5nIGF0dHJpYnV0ZXMiLAorICAiYmFkIG9yIG1pc3Npbmcgc2NvcGUiLAorICAiYmFkIG9yIG1pc3NpbmcgZmlsdGVyIiwKKyAgImJhZCBvciBtaXNzaW5nIGV4dGVuc2lvbnMiCit9OworCit0eXBlZGVmIHN0cnVjdCBsZGFwY29ubmluZm8geworICBMREFQICpsZDsKKyAgQ3VybF9yZWN2ICpyZWN2OyAgLyogZm9yIHN0YWNraW5nIFNTTCBoYW5kbGVyICovCisgIEN1cmxfc2VuZCAqc2VuZDsKKyAgaW50IHByb3RvOworICBpbnQgbXNnaWQ7CisgIGJvb2wgc3NsZG9uZTsKKyAgYm9vbCBzc2xpbnN0OworICBib29sIGRpZGJpbmQ7Cit9IGxkYXBjb25uaW5mbzsKKwordHlwZWRlZiBzdHJ1Y3QgbGRhcHJlcWluZm8geworICBpbnQgbXNnaWQ7CisgIGludCBudW1lbnQ7Cit9IGxkYXByZXFpbmZvOworCitzdGF0aWMgQ1VSTGNvZGUgbGRhcF9zZXR1cChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pCit7CisgIGxkYXBjb25uaW5mbyAqbGk7CisgIExEQVBVUkxEZXNjICpsdWQ7CisgIHN0cnVjdCBTZXNzaW9uSGFuZGxlICpkYXRhPWNvbm4tPmRhdGE7CisgIGludCByYywgcHJvdG87CisgIENVUkxjb2RlIHN0YXR1czsKKworICByYyA9IGxkYXBfdXJsX3BhcnNlKGRhdGEtPmNoYW5nZS51cmwsICZsdWQpOworICBpZiAocmMgIT0gTERBUF9VUkxfU1VDQ0VTUykgeworICAgIGNvbnN0IGNoYXIgKm1zZyA9ICJ1cmwgcGFyc2luZyBwcm9ibGVtIjsKKyAgICBzdGF0dXMgPSBDVVJMRV9VUkxfTUFMRk9STUFUOworICAgIGlmIChyYyA+IExEQVBfVVJMX1NVQ0NFU1MgJiYgcmMgPD0gTERBUF9VUkxfRVJSX0JBREVYVFMpIHsKKyAgICAgIGlmIChyYyA9PSBMREFQX1VSTF9FUlJfTUVNKQorICAgICAgICBzdGF0dXMgPSBDVVJMRV9PVVRfT0ZfTUVNT1JZOworICAgICAgbXNnID0gdXJsX2VycnNbcmNdOworICAgIH0KKyAgICBmYWlsZihjb25uLT5kYXRhLCAiTERBUCBsb2NhbDogJXMiLCBtc2cpOworICAgIHJldHVybiBzdGF0dXM7CisgIH0KKyAgcHJvdG8gPSBsZGFwX3B2dF91cmxfc2NoZW1lMnByb3RvKGx1ZC0+bHVkX3NjaGVtZSk7CisgIGxkYXBfZnJlZV91cmxkZXNjKGx1ZCk7CisKKyAgbGkgPSBjYWxsb2MoMSwgc2l6ZW9mKGxkYXBjb25uaW5mbykpOworICBsaS0+cHJvdG8gPSBwcm90bzsKKyAgY29ubi0+cHJvdG8uZ2VuZXJpYyA9IGxpOworICBjb25uLT5iaXRzLmNsb3NlID0gRkFMU0U7CisgIC8qIFRPRE86CisgICAqIC0gcHJvdmlkZSBvcHRpb24gdG8gY2hvb3NlIFNBU0wgQmluZHMgaW5zdGVhZCBvZiBTaW1wbGUKKyAgICovCisgIHJldHVybiBDVVJMRV9PSzsKK30KKworI2lmZGVmIFVTRV9TU0wKK3N0YXRpYyBTb2NrYnVmX0lPIGxkYXBzYl90bHM7CisjZW5kaWYKKworc3RhdGljIENVUkxjb2RlIGxkYXBfY29ubmVjdChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGJvb2wgKmRvbmUpCit7CisgIGxkYXBjb25uaW5mbyAqbGkgPSBjb25uLT5wcm90by5nZW5lcmljOworICBzdHJ1Y3QgU2Vzc2lvbkhhbmRsZSAqZGF0YT1jb25uLT5kYXRhOworICBpbnQgcmMsIHByb3RvID0gTERBUF9WRVJTSU9OMzsKKyAgY2hhciBob3N0dXJsWzEwMjRdLCAqcHRyOworCisgIHN0cmNweShob3N0dXJsLCAibGRhcCIpOworICBwdHIgPSBob3N0dXJsKzQ7CisgIGlmIChjb25uLT5wcm90b2NvbCAmIFBST1RfU1NMKQorICAgICpwdHIrKyA9ICdzJzsKKyAgc25wcmludGYocHRyLCBzaXplb2YoaG9zdHVybCktKHB0ci1ob3N0dXJsKSwgIjovLyVzOiVkIiwKKyAgICBjb25uLT5ob3N0Lm5hbWUsIGNvbm4tPnBvcnQpOworCisgIHJjID0gbGRhcF9pbml0X2ZkKGNvbm4tPnNvY2tbRklSU1RTT0NLRVRdLCBsaS0+cHJvdG8sIGhvc3R1cmwsICZsaS0+bGQpOworICBpZiAocmMpIHsKKyAgICBmYWlsZihkYXRhLCAiTERBUCBsb2NhbDogQ2Fubm90IGNvbm5lY3QgdG8gJXMsICVzIiwKKyAgICAgICAgICBob3N0dXJsLCBsZGFwX2VycjJzdHJpbmcocmMpKTsKKyAgICByZXR1cm4gQ1VSTEVfQ09VTEROVF9DT05ORUNUOworICB9CisKKyAgbGRhcF9zZXRfb3B0aW9uKGxpLT5sZCwgTERBUF9PUFRfUFJPVE9DT0xfVkVSU0lPTiwgJnByb3RvKTsKKworI2lmICFkZWZpbmVkKENVUkxfRElTQUJMRV9IVFRQKSAmJiAhZGVmaW5lZChDVVJMX0RJU0FCTEVfUFJPWFkpCisgIGlmKGNvbm4tPmJpdHMudHVubmVsX3Byb3h5ICYmIGNvbm4tPmJpdHMuaHR0cHByb3h5KSB7CisgICAgLyogZm9yIExEQVAgb3ZlciBIVFRQIHByb3h5ICovCisgICAgc3RydWN0IEhUVFAgaHR0cF9wcm94eTsKKyAgICBsZGFwY29ubmluZm8gKmxpX3NhdmU7CisgICAgQ1VSTGNvZGUgcmVzdWx0OworCisgICAgLyogQkxPQ0tJTkcgKi8KKyAgICAvKiBXZSB3YW50ICJzZWFtbGVzcyIgTERBUCBvcGVyYXRpb25zIHRocm91Z2ggSFRUUCBwcm94eSB0dW5uZWwgKi8KKworICAgIC8qIEN1cmxfcHJveHlDT05ORUNUIGlzIGJhc2VkIG9uIGEgcG9pbnRlciB0byBhIHN0cnVjdCBIVFRQIGF0IHRoZSBtZW1iZXIKKyAgICAgKiBjb25uLT5wcm90by5odHRwOyB3ZSB3YW50IExEQVAgdGhyb3VnaCBIVFRQIGFuZCB3ZSBoYXZlIHRvIGNoYW5nZSB0aGUKKyAgICAgKiBtZW1iZXIgdGVtcG9yYXJpbHkgZm9yIGNvbm5lY3RpbmcgdG8gdGhlIEhUVFAgcHJveHkuIEFmdGVyCisgICAgICogQ3VybF9wcm94eUNPTk5FQ1Qgd2UgaGF2ZSB0byBzZXQgYmFjayB0aGUgbWVtYmVyIHRvIHRoZSBvcmlnaW5hbCBzdHJ1Y3QKKyAgICAgKiBMREFQIHBvaW50ZXIKKyAgICAgKi8KKyAgICBsaV9zYXZlID0gZGF0YS0+c3RhdGUucHJvdG8uZ2VuZXJpYzsKKyAgICBtZW1zZXQoJmh0dHBfcHJveHksIDAsIHNpemVvZihodHRwX3Byb3h5KSk7CisgICAgZGF0YS0+c3RhdGUucHJvdG8uaHR0cCA9ICZodHRwX3Byb3h5OworICAgIHJlc3VsdCA9IEN1cmxfcHJveHlDT05ORUNUKGNvbm4sIEZJUlNUU09DS0VULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbm4tPmhvc3QubmFtZSwgY29ubi0+cmVtb3RlX3BvcnQpOworCisgICAgZGF0YS0+c3RhdGUucHJvdG8uZ2VuZXJpYyA9IGxpX3NhdmU7CisKKyAgICBpZihDVVJMRV9PSyAhPSByZXN1bHQpCisgICAgICByZXR1cm4gcmVzdWx0OworICB9CisjZW5kaWYgLyogIUNVUkxfRElTQUJMRV9IVFRQICYmICFDVVJMX0RJU0FCTEVfUFJPWFkgKi8KKworI2lmZGVmIFVTRV9TU0wKKyAgaWYgKGNvbm4tPnByb3RvY29sICYgUFJPVF9TU0wpIHsKKyAgICBDVVJMY29kZSByZXM7CisgICAgaWYgKGRhdGEtPnN0YXRlLnVzZWRfaW50ZXJmYWNlID09IEN1cmxfaWZfZWFzeSkgeworICAgICAgcmVzID0gQ3VybF9zc2xfY29ubmVjdChjb25uLCBGSVJTVFNPQ0tFVCk7CisgICAgICBpZiAocmVzKQorICAgICAgICByZXR1cm4gcmVzOworICAgICAgbGktPnNzbGRvbmUgPSBUUlVFOworICAgIH0gZWxzZSB7CisgICAgICByZXMgPSBDdXJsX3NzbF9jb25uZWN0X25vbmJsb2NraW5nKGNvbm4sIEZJUlNUU09DS0VULCAmbGktPnNzbGRvbmUpOworICAgICAgaWYgKHJlcykKKyAgICAgICAgcmV0dXJuIHJlczsKKyAgICB9CisgIH0KKyNlbmRpZgorCisgIGlmIChkYXRhLT5zdGF0ZS51c2VkX2ludGVyZmFjZSA9PSBDdXJsX2lmX2Vhc3kpCisgICAgcmV0dXJuIGxkYXBfY29ubmVjdGluZyhjb25uLCBkb25lKTsKKworICByZXR1cm4gQ1VSTEVfT0s7Cit9CisKK3N0YXRpYyBDVVJMY29kZSBsZGFwX2Nvbm5lY3Rpbmcoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBib29sICpkb25lKQoreworICBsZGFwY29ubmluZm8gKmxpID0gY29ubi0+cHJvdG8uZ2VuZXJpYzsKKyAgc3RydWN0IFNlc3Npb25IYW5kbGUgKmRhdGE9Y29ubi0+ZGF0YTsKKyAgTERBUE1lc3NhZ2UgKnJlc3VsdCA9IE5VTEw7CisgIHN0cnVjdCB0aW1ldmFsIHR2ID0gezAsMX0sICp0dnA7CisgIGludCByYywgZXJyOworICBjaGFyICppbmZvID0gTlVMTDsKKworI2lmZGVmIFVTRV9TU0wKKyAgaWYgKGNvbm4tPnByb3RvY29sICYgUFJPVF9TU0wpIHsKKyAgICAvKiBJcyB0aGUgU1NMIGhhbmRzaGFrZSBjb21wbGV0ZSB5ZXQ/ICovCisgICAgaWYgKCFsaS0+c3NsZG9uZSkgeworICAgICAgQ1VSTGNvZGUgcmVzID0gQ3VybF9zc2xfY29ubmVjdF9ub25ibG9ja2luZyhjb25uLCBGSVJTVFNPQ0tFVCwgJmxpLT5zc2xkb25lKTsKKyAgICAgIGlmIChyZXMgfHwgIWxpLT5zc2xkb25lKQorICAgICAgICByZXR1cm4gcmVzOworICAgIH0KKyAgICAvKiBIYXZlIHdlIGluc3RhbGxlZCB0aGUgbGliY3VybCBTU0wgaGFuZGxlcnMgaW50byB0aGUgc29ja2J1ZiB5ZXQ/ICovCisgICAgaWYgKCFsaS0+c3NsaW5zdCkgeworICAgICAgU29ja2J1ZiAqc2I7CisgICAgICBsZGFwX2dldF9vcHRpb24obGktPmxkLCBMREFQX09QVF9TT0NLQlVGLCAmc2IpOworICAgICAgYmVyX3NvY2tidWZfYWRkX2lvKHNiLCAmbGRhcHNiX3RscywgTEJFUl9TQklPRF9MRVZFTF9UUkFOU1BPUlQsIGNvbm4pOworICAgICAgbGktPnNzbGluc3QgPSBUUlVFOworICAgICAgbGktPnJlY3YgPSBjb25uLT5yZWN2W0ZJUlNUU09DS0VUXTsKKyAgICAgIGxpLT5zZW5kID0gY29ubi0+c2VuZFtGSVJTVFNPQ0tFVF07CisgICAgfQorICB9CisjZW5kaWYKKworICBpZiAoZGF0YS0+c3RhdGUudXNlZF9pbnRlcmZhY2UgPT0gQ3VybF9pZl9lYXN5KQorICAgIHR2cCA9IE5VTEw7ICAgIC8qIGxldCBsZGFwX3Jlc3VsdCBibG9jayBpbmRlZmluaXRlbHkgKi8KKyAgZWxzZQorICAgIHR2cCA9ICZ0djsKKworcmV0cnk6CisgIGlmICghbGktPmRpZGJpbmQpIHsKKyAgICBjaGFyICpiaW5kZG47CisgICAgc3RydWN0IGJlcnZhbCBwYXNzd2Q7CisKKyAgICBpZiAoY29ubi0+Yml0cy51c2VyX3Bhc3N3ZCkgeworICAgICAgYmluZGRuID0gY29ubi0+dXNlcjsKKyAgICAgIHBhc3N3ZC5idl92YWwgPSBjb25uLT5wYXNzd2Q7CisgICAgICBwYXNzd2QuYnZfbGVuID0gc3RybGVuKHBhc3N3ZC5idl92YWwpOworICAgIH0gZWxzZSB7CisgICAgICBiaW5kZG4gPSBOVUxMOworICAgICAgcGFzc3dkLmJ2X3ZhbCA9IE5VTEw7CisgICAgICBwYXNzd2QuYnZfbGVuID0gMDsKKyAgICB9CisgICAgcmMgPSBsZGFwX3Nhc2xfYmluZChsaS0+bGQsIGJpbmRkbiwgTERBUF9TQVNMX1NJTVBMRSwgJnBhc3N3ZCwKKyAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIE5VTEwsICZsaS0+bXNnaWQpOworICAgIGlmIChyYykKKyAgICAgIHJldHVybiBDVVJMRV9MREFQX0NBTk5PVF9CSU5EOworICAgIGxpLT5kaWRiaW5kID0gVFJVRTsKKyAgICBpZiAodHZwKQorICAgICAgcmV0dXJuIENVUkxFX09LOworICB9CisKKyAgcmMgPSBsZGFwX3Jlc3VsdChsaS0+bGQsIGxpLT5tc2dpZCwgTERBUF9NU0dfT05FLCB0dnAsICZyZXN1bHQpOworICBpZiAocmMgPCAwKSB7CisgICAgZmFpbGYoZGF0YSwgIkxEQVAgbG9jYWw6IGJpbmQgbGRhcF9yZXN1bHQgJXMiLCBsZGFwX2VycjJzdHJpbmcocmMpKTsKKyAgICByZXR1cm4gQ1VSTEVfTERBUF9DQU5OT1RfQklORDsKKyAgfQorICBpZiAocmMgPT0gMCkgeworICAgIC8qIHRpbWVkIG91dCAqLworICAgIHJldHVybiBDVVJMRV9PSzsKKyAgfQorICByYyA9IGxkYXBfcGFyc2VfcmVzdWx0KGxpLT5sZCwgcmVzdWx0LCAmZXJyLCBOVUxMLCAmaW5mbywgTlVMTCwgTlVMTCwgMSk7CisgIGlmIChyYykgeworICAgIGZhaWxmKGRhdGEsICJMREFQIGxvY2FsOiBiaW5kIGxkYXBfcGFyc2VfcmVzdWx0ICVzIiwgbGRhcF9lcnIyc3RyaW5nKHJjKSk7CisgICAgcmV0dXJuIENVUkxFX0xEQVBfQ0FOTk9UX0JJTkQ7CisgIH0KKyAgLyogVHJ5IHRvIGZhbGxiYWNrIHRvIExEQVB2Mj8gKi8KKyAgaWYgKGVyciA9PSBMREFQX1BST1RPQ09MX0VSUk9SKSB7CisgICAgaW50IHByb3RvOworICAgIGxkYXBfZ2V0X29wdGlvbihsaS0+bGQsIExEQVBfT1BUX1BST1RPQ09MX1ZFUlNJT04sICZwcm90byk7CisgICAgaWYgKHByb3RvID09IExEQVBfVkVSU0lPTjMpIHsKKyAgICAgIGxkYXBfbWVtZnJlZShpbmZvKTsKKyAgICAgIHByb3RvID0gTERBUF9WRVJTSU9OMjsKKyAgICAgIGxkYXBfc2V0X29wdGlvbihsaS0+bGQsIExEQVBfT1BUX1BST1RPQ09MX1ZFUlNJT04sICZwcm90byk7CisgICAgICBsaS0+ZGlkYmluZCA9IEZBTFNFOworICAgICAgZ290byByZXRyeTsKKyAgICB9CisgIH0KKworICBpZiAoZXJyKSB7CisgICAgZmFpbGYoZGF0YSwgIkxEQVAgcmVtb3RlOiBiaW5kIGZhaWxlZCAlcyAlcyIsIGxkYXBfZXJyMnN0cmluZyhyYyksCisgICAgICAgICAgaW5mbyA/IGluZm8gOiAiIik7CisgICAgcmV0dXJuIENVUkxFX0xPR0lOX0RFTklFRDsKKyAgfQorICBjb25uLT5yZWN2W0ZJUlNUU09DS0VUXSA9IGxkYXBfcmVjdjsKKyAgKmRvbmUgPSBUUlVFOworICByZXR1cm4gQ1VSTEVfT0s7Cit9CisKK3N0YXRpYyBDVVJMY29kZSBsZGFwX2Rpc2Nvbm5lY3Qoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uKQoreworICBsZGFwY29ubmluZm8gKmxpID0gY29ubi0+cHJvdG8uZ2VuZXJpYzsKKworICBpZiAobGkpIHsKKyAgICBpZiAobGktPmxkKSB7CisgICAgICBsZGFwX3VuYmluZF9leHQobGktPmxkLCBOVUxMLCBOVUxMKTsKKyAgICAgIGxpLT5sZCA9IE5VTEw7CisgICAgfQorICAgIGNvbm4tPnByb3RvLmdlbmVyaWMgPSBOVUxMOworICAgIGZyZWUobGkpOworICB9CisgIHJldHVybiBDVVJMRV9PSzsKK30KKworc3RhdGljIENVUkxjb2RlIGxkYXBfZG8oc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBib29sICpkb25lKQoreworICBsZGFwY29ubmluZm8gKmxpID0gY29ubi0+cHJvdG8uZ2VuZXJpYzsKKyAgbGRhcHJlcWluZm8gKmxyOworICBDVVJMY29kZSBzdGF0dXMgPSBDVVJMRV9PSzsKKyAgaW50IHJjID0gMDsKKyAgTERBUFVSTERlc2MgKmx1ZHAgPSBOVUxMOworICBpbnQgbXNnaWQ7CisgIHN0cnVjdCBTZXNzaW9uSGFuZGxlICpkYXRhPWNvbm4tPmRhdGE7CisKKyAgY29ubi0+Yml0cy5jbG9zZSA9IEZBTFNFOworCisgIGluZm9mKGRhdGEsICJMREFQIGxvY2FsOiAlc1xuIiwgZGF0YS0+Y2hhbmdlLnVybCk7CisKKyAgcmMgPSBsZGFwX3VybF9wYXJzZShkYXRhLT5jaGFuZ2UudXJsLCAmbHVkcCk7CisgIGlmIChyYyAhPSBMREFQX1VSTF9TVUNDRVNTKSB7CisgICAgY29uc3QgY2hhciAqbXNnID0gInVybCBwYXJzaW5nIHByb2JsZW0iOworICAgIHN0YXR1cyA9IENVUkxFX1VSTF9NQUxGT1JNQVQ7CisgICAgaWYgKHJjID4gTERBUF9VUkxfU1VDQ0VTUyAmJiByYyA8PSBMREFQX1VSTF9FUlJfQkFERVhUUykgeworICAgICAgaWYgKHJjID09IExEQVBfVVJMX0VSUl9NRU0pCisgICAgICAgIHN0YXR1cyA9IENVUkxFX09VVF9PRl9NRU1PUlk7CisgICAgICBtc2cgPSB1cmxfZXJyc1tyY107CisgICAgfQorICAgIGZhaWxmKGNvbm4tPmRhdGEsICJMREFQIGxvY2FsOiAlcyIsIG1zZyk7CisgICAgcmV0dXJuIHN0YXR1czsKKyAgfQorCisgIHJjID0gbGRhcF9zZWFyY2hfZXh0KGxpLT5sZCwgbHVkcC0+bHVkX2RuLCBsdWRwLT5sdWRfc2NvcGUsCisgICAgICAgICAgICAgICAgICAgICAgIGx1ZHAtPmx1ZF9maWx0ZXIsIGx1ZHAtPmx1ZF9hdHRycywgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgTlVMTCwgTlVMTCwgMCwgJm1zZ2lkKTsKKyAgbGRhcF9mcmVlX3VybGRlc2MobHVkcCk7CisgIGlmIChyYyAhPSBMREFQX1NVQ0NFU1MpIHsKKyAgICBmYWlsZihkYXRhLCAiTERBUCBsb2NhbDogbGRhcF9zZWFyY2hfZXh0ICVzIiwgbGRhcF9lcnIyc3RyaW5nKHJjKSk7CisgICAgcmV0dXJuIENVUkxFX0xEQVBfU0VBUkNIX0ZBSUxFRDsKKyAgfQorICBsciA9IGNhbGxvYygxLHNpemVvZihsZGFwcmVxaW5mbykpOworICBsci0+bXNnaWQgPSBtc2dpZDsKKyAgZGF0YS0+c3RhdGUucHJvdG8uZ2VuZXJpYyA9IGxyOworICBDdXJsX3NldHVwX3RyYW5zZmVyKGNvbm4sIEZJUlNUU09DS0VULCAtMSwgRkFMU0UsIE5VTEwsIC0xLCBOVUxMKTsKKyAgKmRvbmUgPSBUUlVFOworICByZXR1cm4gQ1VSTEVfT0s7Cit9CisKK3N0YXRpYyBDVVJMY29kZSBsZGFwX2RvbmUoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBDVVJMY29kZSByZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgcHJlbWF0dXJlKQoreworICBsZGFwcmVxaW5mbyAqbHIgPSBjb25uLT5kYXRhLT5zdGF0ZS5wcm90by5nZW5lcmljOworICAodm9pZClyZXM7CisgICh2b2lkKXByZW1hdHVyZTsKKworICBpZiAobHIpIHsKKyAgICAvKiBpZiB0aGVyZSB3YXMgYSBzZWFyY2ggaW4gcHJvZ3Jlc3MsIGFiYW5kb24gaXQgKi8KKyAgICBpZiAobHItPm1zZ2lkKSB7CisgICAgICBsZGFwY29ubmluZm8gKmxpID0gY29ubi0+cHJvdG8uZ2VuZXJpYzsKKyAgICAgIGxkYXBfYWJhbmRvbl9leHQobGktPmxkLCBsci0+bXNnaWQsIE5VTEwsIE5VTEwpOworICAgICAgbHItPm1zZ2lkID0gMDsKKyAgICB9CisgICAgY29ubi0+ZGF0YS0+c3RhdGUucHJvdG8uZ2VuZXJpYyA9IE5VTEw7CisgICAgZnJlZShscik7CisgIH0KKyAgcmV0dXJuIENVUkxFX09LOworfQorCitzdGF0aWMgc3NpemVfdCBsZGFwX3JlY3Yoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBpbnQgc29ja2luZGV4LCBjaGFyICpidWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGxlbiwgQ1VSTGNvZGUgKmVycikKK3sKKyAgbGRhcGNvbm5pbmZvICpsaSA9IGNvbm4tPnByb3RvLmdlbmVyaWM7CisgIHN0cnVjdCBTZXNzaW9uSGFuZGxlICpkYXRhPWNvbm4tPmRhdGE7CisgIGxkYXByZXFpbmZvICpsciA9IGRhdGEtPnN0YXRlLnByb3RvLmdlbmVyaWM7CisgIGludCByYywgcmV0OworICBMREFQTWVzc2FnZSAqcmVzdWx0ID0gTlVMTDsKKyAgTERBUE1lc3NhZ2UgKmVudDsKKyAgQmVyRWxlbWVudCAqYmVyID0gTlVMTDsKKyAgc3RydWN0IHRpbWV2YWwgdHYgPSB7MCwxfTsKKyAgKHZvaWQpbGVuOworICAodm9pZClidWY7CisgICh2b2lkKXNvY2tpbmRleDsKKworICByYyA9IGxkYXBfcmVzdWx0KGxpLT5sZCwgbHItPm1zZ2lkLCBMREFQX01TR19SRUNFSVZFRCwgJnR2LCAmcmVzdWx0KTsKKyAgaWYgKHJjIDwgMCkgeworICAgIGZhaWxmKGRhdGEsICJMREFQIGxvY2FsOiBzZWFyY2ggbGRhcF9yZXN1bHQgJXMiLCBsZGFwX2VycjJzdHJpbmcocmMpKTsKKyAgICAqZXJyID0gQ1VSTEVfUkVDVl9FUlJPUjsKKyAgICByZXR1cm4gLTE7CisgIH0KKworICAqZXJyID0gQ1VSTEVfQUdBSU47CisgIHJldCA9IC0xOworCisgIC8qIHRpbWVkIG91dCAqLworICBpZiAocmVzdWx0ID09IE5VTEwpCisgICAgcmV0dXJuIHJldDsKKworICBmb3IgKGVudCA9IGxkYXBfZmlyc3RfbWVzc2FnZShsaS0+bGQsIHJlc3VsdCk7IGVudDsKKyAgICBlbnQgPSBsZGFwX25leHRfbWVzc2FnZShsaS0+bGQsIGVudCkpIHsKKyAgICBzdHJ1Y3QgYmVydmFsIGJ2LCAqYnZhbHMsICoqYnZwID0gJmJ2YWxzOworICAgIGludCBiaW5hcnkgPSAwLCBtc2d0eXBlOworCisgICAgbXNndHlwZSA9IGxkYXBfbXNndHlwZShlbnQpOworICAgIGlmIChtc2d0eXBlID09IExEQVBfUkVTX1NFQVJDSF9SRVNVTFQpIHsKKyAgICAgIGludCBjb2RlOworICAgICAgY2hhciAqaW5mbyA9IE5VTEw7CisgICAgICByYyA9IGxkYXBfcGFyc2VfcmVzdWx0KGxpLT5sZCwgZW50LCAmY29kZSwgTlVMTCwgJmluZm8sIE5VTEwsIE5VTEwsIDApOworICAgICAgaWYgKHJjKSB7CisgICAgICAgIGZhaWxmKGRhdGEsICJMREFQIGxvY2FsOiBzZWFyY2ggbGRhcF9wYXJzZV9yZXN1bHQgJXMiLCBsZGFwX2VycjJzdHJpbmcocmMpKTsKKyAgICAgICAgKmVyciA9IENVUkxFX0xEQVBfU0VBUkNIX0ZBSUxFRDsKKyAgICAgIH0gZWxzZSBpZiAoY29kZSAmJiBjb2RlICE9IExEQVBfU0laRUxJTUlUX0VYQ0VFREVEKSB7CisgICAgICAgIGZhaWxmKGRhdGEsICJMREFQIHJlbW90ZTogc2VhcmNoIGZhaWxlZCAlcyAlcyIsIGxkYXBfZXJyMnN0cmluZyhyYyksCisgICAgICAgICAgaW5mbyA/IGluZm8gOiAiIik7CisgICAgICAgICplcnIgPSBDVVJMRV9MREFQX1NFQVJDSF9GQUlMRUQ7CisgICAgICB9IGVsc2UgeworICAgICAgICAvKiBzdWNjZXNzZnVsICovCisgICAgICAgIGlmIChjb2RlID09IExEQVBfU0laRUxJTUlUX0VYQ0VFREVEKQorICAgICAgICAgIGluZm9mKGRhdGEsICJUaGVyZSBhcmUgbW9yZSB0aGFuICVkIGVudHJpZXNcbiIsIGxyLT5udW1lbnQpOworICAgICAgICBkYXRhLT5yZXEuc2l6ZSA9IGRhdGEtPnJlcS5ieXRlY291bnQ7CisgICAgICAgICplcnIgPSBDVVJMRV9PSzsKKyAgICAgICAgcmV0ID0gMDsKKyAgICAgIH0KKyAgICAgIGxyLT5tc2dpZCA9IDA7CisgICAgICBsZGFwX21lbWZyZWUoaW5mbyk7CisgICAgICBicmVhazsKKyAgICB9IGVsc2UgaWYgKG1zZ3R5cGUgIT0gTERBUF9SRVNfU0VBUkNIX0VOVFJZKSB7CisgICAgICBjb250aW51ZTsKKyAgICB9CisKKyAgICBsci0+bnVtZW50Kys7CisgICAgcmMgPSBsZGFwX2dldF9kbl9iZXIobGktPmxkLCBlbnQsICZiZXIsICZidik7CisgICAgQ3VybF9jbGllbnRfd3JpdGUoY29ubiwgQ0xJRU5UV1JJVEVfQk9EWSwgKGNoYXIgKikiRE46ICIsIDQpOworICAgIEN1cmxfY2xpZW50X3dyaXRlKGNvbm4sIENMSUVOVFdSSVRFX0JPRFksIChjaGFyICopYnYuYnZfdmFsLCBidi5idl9sZW4pOworICAgIEN1cmxfY2xpZW50X3dyaXRlKGNvbm4sIENMSUVOVFdSSVRFX0JPRFksIChjaGFyICopIlxuIiwgMSk7CisgICAgZGF0YS0+cmVxLmJ5dGVjb3VudCArPSBidi5idl9sZW4gKyA1OworCisgICAgZm9yIChyYyA9IGxkYXBfZ2V0X2F0dHJpYnV0ZV9iZXIobGktPmxkLCBlbnQsIGJlciwgJmJ2LCBidnApOworICAgICAgcmMgPT0gTERBUF9TVUNDRVNTOworICAgICAgcmMgPSBsZGFwX2dldF9hdHRyaWJ1dGVfYmVyKGxpLT5sZCwgZW50LCBiZXIsICZidiwgYnZwKSkgeworICAgICAgaW50IGk7CisKKyAgICAgIGlmIChidi5idl92YWwgPT0gTlVMTCkgYnJlYWs7CisKKyAgICAgIGlmIChidi5idl9sZW4gPiA3ICYmICFzdHJuY21wKGJ2LmJ2X3ZhbCArIGJ2LmJ2X2xlbiAtIDcsICI7YmluYXJ5IiwgNykpCisgICAgICAgIGJpbmFyeSA9IDE7CisKKyAgICAgIGZvciAoaT0wOyBidmFsc1tpXS5idl92YWwgIT0gTlVMTDsgaSsrKSB7CisgICAgICAgIGludCBiaW52YWwgPSAwOworICAgICAgICBDdXJsX2NsaWVudF93cml0ZShjb25uLCBDTElFTlRXUklURV9CT0RZLCAoY2hhciAqKSJcdCIsIDEpOworICAgICAgICBDdXJsX2NsaWVudF93cml0ZShjb25uLCBDTElFTlRXUklURV9CT0RZLCAoY2hhciAqKWJ2LmJ2X3ZhbCwgYnYuYnZfbGVuKTsKKyAgICAgICAgQ3VybF9jbGllbnRfd3JpdGUoY29ubiwgQ0xJRU5UV1JJVEVfQk9EWSwgKGNoYXIgKikiOiIsIDEpOworICAgICAgICBkYXRhLT5yZXEuYnl0ZWNvdW50ICs9IGJ2LmJ2X2xlbiArIDI7CisKKyAgICAgICAgaWYgKCFiaW5hcnkpIHsKKyAgICAgICAgICAvKiBjaGVjayBmb3IgbGVhZGluZyBvciB0cmFpbGluZyB3aGl0ZXNwYWNlICovCisgICAgICAgICAgaWYgKGlzc3BhY2UoYnZhbHNbaV0uYnZfdmFsWzBdKSB8fAorICAgICAgICAgICAgICBpc3NwYWNlKGJ2YWxzW2ldLmJ2X3ZhbFtidmFsc1tpXS5idl9sZW4tMV0pKSB7CisgICAgICAgICAgICBiaW52YWwgPSAxOworICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvKiBjaGVjayBmb3IgdW5wcmludGFibGUgY2hhcmFjdGVycyAqLworICAgICAgICAgICAgdW5zaWduZWQgaW50IGo7CisgICAgICAgICAgICBmb3IgKGo9MDsgajxidmFsc1tpXS5idl9sZW47IGorKykKKyAgICAgICAgICAgICAgaWYgKCFpc3ByaW50KGJ2YWxzW2ldLmJ2X3ZhbFtqXSkpIHsKKyAgICAgICAgICAgICAgICBiaW52YWwgPSAxOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChiaW5hcnkgfHwgYmludmFsKSB7CisgICAgICAgICAgY2hhciAqdmFsX2I2NDsKKyAgICAgICAgICAvKiBCaW5hcnkgdmFsdWUsIGVuY29kZSB0byBiYXNlNjQuICovCisgICAgICAgICAgc2l6ZV90IHZhbF9iNjRfc3ogPSBDdXJsX2Jhc2U2NF9lbmNvZGUoZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnZhbHNbaV0uYnZfdmFsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidmFsc1tpXS5idl9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ2YWxfYjY0KTsKKyAgICAgICAgICBDdXJsX2NsaWVudF93cml0ZShjb25uLCBDTElFTlRXUklURV9CT0RZLCAoY2hhciAqKSI6ICIsIDIpOworICAgICAgICAgIGRhdGEtPnJlcS5ieXRlY291bnQgKz0gMjsKKyAgICAgICAgICBpZih2YWxfYjY0X3N6ID4gMCkgeworICAgICAgICAgICAgQ3VybF9jbGllbnRfd3JpdGUoY29ubiwgQ0xJRU5UV1JJVEVfQk9EWSwgdmFsX2I2NCwgdmFsX2I2NF9zeik7CisgICAgICAgICAgICBmcmVlKHZhbF9iNjQpOworICAgICAgICAgICAgZGF0YS0+cmVxLmJ5dGVjb3VudCArPSB2YWxfYjY0X3N6OworICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBDdXJsX2NsaWVudF93cml0ZShjb25uLCBDTElFTlRXUklURV9CT0RZLCAoY2hhciAqKSIgIiwgMSk7CisgICAgICAgICAgQ3VybF9jbGllbnRfd3JpdGUoY29ubiwgQ0xJRU5UV1JJVEVfQk9EWSwgYnZhbHNbaV0uYnZfdmFsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ2YWxzW2ldLmJ2X2xlbik7CisgICAgICAgICAgZGF0YS0+cmVxLmJ5dGVjb3VudCArPSBidmFsc1tpXS5idl9sZW4gKyAxOworICAgICAgICB9CisgICAgICAgIEN1cmxfY2xpZW50X3dyaXRlKGNvbm4sIENMSUVOVFdSSVRFX0JPRFksIChjaGFyICopIlxuIiwgMCk7CisgICAgICAgIGRhdGEtPnJlcS5ieXRlY291bnQrKzsKKyAgICAgIH0KKyAgICAgIGJlcl9tZW1mcmVlKGJ2YWxzKTsKKyAgICAgIEN1cmxfY2xpZW50X3dyaXRlKGNvbm4sIENMSUVOVFdSSVRFX0JPRFksIChjaGFyICopIlxuIiwgMCk7CisgICAgICBkYXRhLT5yZXEuYnl0ZWNvdW50Kys7CisgICAgfQorICAgIEN1cmxfY2xpZW50X3dyaXRlKGNvbm4sIENMSUVOVFdSSVRFX0JPRFksIChjaGFyICopIlxuIiwgMCk7CisgICAgZGF0YS0+cmVxLmJ5dGVjb3VudCsrOworICAgIGJlcl9mcmVlKGJlciwgMCk7CisgIH0KKyAgbGRhcF9tc2dmcmVlKHJlc3VsdCk7CisgIHJldHVybiByZXQ7Cit9CisKKyNpZmRlZiBVU0VfU1NMCitzdGF0aWMgaW50CitsZGFwc2JfdGxzX3NldHVwKFNvY2tidWZfSU9fRGVzYyAqc2Jpb2QsIHZvaWQgKmFyZykKK3sKKyAgc2Jpb2QtPnNiaW9kX3B2dCA9IGFyZzsKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK2xkYXBzYl90bHNfcmVtb3ZlKFNvY2tidWZfSU9fRGVzYyAqc2Jpb2QpCit7CisgIHNiaW9kLT5zYmlvZF9wdnQgPSBOVUxMOworICByZXR1cm4gMDsKK30KKworLyogV2UgZG9uJ3QgbmVlZCB0byBkbyBhbnl0aGluZyBiZWNhdXNlIGxpYmN1cmwgZG9lcyBpdCBhbHJlYWR5ICovCitzdGF0aWMgaW50CitsZGFwc2JfdGxzX2Nsb3NlKFNvY2tidWZfSU9fRGVzYyAqc2Jpb2QpCit7CisgICh2b2lkKXNiaW9kOworICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAorbGRhcHNiX3Rsc19jdHJsKFNvY2tidWZfSU9fRGVzYyAqc2Jpb2QsIGludCBvcHQsIHZvaWQgKmFyZykKK3sKKyAgKHZvaWQpYXJnOworICBpZiAob3B0ID09IExCRVJfU0JfT1BUX0RBVEFfUkVBRFkpIHsKKyAgICBzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4gPSBzYmlvZC0+c2Jpb2RfcHZ0OworICAgIHJldHVybiBDdXJsX3NzbF9kYXRhX3BlbmRpbmcoY29ubiwgRklSU1RTT0NLRVQpOworICB9CisgIHJldHVybiAwOworfQorCitzdGF0aWMgYmVyX3NsZW5fdAorbGRhcHNiX3Rsc19yZWFkKFNvY2tidWZfSU9fRGVzYyAqc2Jpb2QsIHZvaWQgKmJ1ZiwgYmVyX2xlbl90IGxlbikKK3sKKyAgc3RydWN0IGNvbm5lY3RkYXRhICpjb25uID0gc2Jpb2QtPnNiaW9kX3B2dDsKKyAgbGRhcGNvbm5pbmZvICpsaSA9IGNvbm4tPnByb3RvLmdlbmVyaWM7CisgIGJlcl9zbGVuX3QgcmV0OworICBDVVJMY29kZSBlcnIgPSBDVVJMRV9SRUNWX0VSUk9SOworCisgIHJldCA9IGxpLT5yZWN2KGNvbm4sIEZJUlNUU09DS0VULCBidWYsIGxlbiwgJmVycik7CisgIGlmIChyZXQgPCAwICYmIGVyciA9PSBDVVJMRV9BR0FJTikgeworICAgIFNFVF9TT0NLRVJSTk8oRVdPVUxEQkxPQ0spOworICB9CisgIHJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBiZXJfc2xlbl90CitsZGFwc2JfdGxzX3dyaXRlKFNvY2tidWZfSU9fRGVzYyAqc2Jpb2QsIHZvaWQgKmJ1ZiwgYmVyX2xlbl90IGxlbikKK3sKKyAgc3RydWN0IGNvbm5lY3RkYXRhICpjb25uID0gc2Jpb2QtPnNiaW9kX3B2dDsKKyAgbGRhcGNvbm5pbmZvICpsaSA9IGNvbm4tPnByb3RvLmdlbmVyaWM7CisgIGJlcl9zbGVuX3QgcmV0OworICBDVVJMY29kZSBlcnIgPSBDVVJMRV9TRU5EX0VSUk9SOworCisgIHJldCA9IGxpLT5zZW5kKGNvbm4sIEZJUlNUU09DS0VULCBidWYsIGxlbiwgJmVycik7CisgIGlmIChyZXQgPCAwICYmIGVyciA9PSBDVVJMRV9BR0FJTikgeworICAgIFNFVF9TT0NLRVJSTk8oRVdPVUxEQkxPQ0spOworICB9CisgIHJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBTb2NrYnVmX0lPIGxkYXBzYl90bHMgPQoreworICBsZGFwc2JfdGxzX3NldHVwLAorICBsZGFwc2JfdGxzX3JlbW92ZSwKKyAgbGRhcHNiX3Rsc19jdHJsLAorICBsZGFwc2JfdGxzX3JlYWQsCisgIGxkYXBzYl90bHNfd3JpdGUsCisgIGxkYXBzYl90bHNfY2xvc2UKK307CisjZW5kaWYgLyogVVNFX1NTTCAqLworCisjZW5kaWYgLyogIUNVUkxfRElTQUJMRV9MREFQICYmIFVTRV9PUEVOTERBUCAqLwpkaWZmIC0tZ2l0IGEvbGliL3BhcnNlZGF0ZS5jIGIvbGliL3BhcnNlZGF0ZS5jCmluZGV4IDhlMjZmMWMuLjVkOGFmMjYgMTAwNjQ0Ci0tLSBhL2xpYi9wYXJzZWRhdGUuYworKysgYi9saWIvcGFyc2VkYXRlLmMKQEAgLTUsNyArNSw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAwOSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKQEAgLTM3MCw3ICszNzAsMTIgQEAKICAgICAgICAgICgzID09IHNzY2FuZihkYXRlLCAiJTAyZDolMDJkOiUwMmQiLCAmaG91cm51bSwgJm1pbm51bSwgJnNlY251bSkpKSB7CiAgICAgICAgIC8qIHRpbWUgc3RhbXAhICovCiAgICAgICAgIGRhdGUgKz0gODsKLSAgICAgICAgZm91bmQgPSBUUlVFOworICAgICAgfQorICAgICAgZWxzZSBpZigoc2VjbnVtID09IC0xKSAmJgorICAgICAgICAgICAgICAoMiA9PSBzc2NhbmYoZGF0ZSwgIiUwMmQ6JTAyZCIsICZob3VybnVtLCAmbWlubnVtKSkpIHsKKyAgICAgICAgLyogdGltZSBzdGFtcCB3aXRob3V0IHNlY29uZHMgKi8KKyAgICAgICAgZGF0ZSArPSA1OworICAgICAgICBzZWNudW0gPSAwOwogICAgICAgfQogICAgICAgZWxzZSB7CiAgICAgICAgIHZhbCA9IChpbnQpc3RydG9sKGRhdGUsICZlbmQsIDEwKTsKZGlmZiAtLWdpdCBhL2xpYi9waW5ncG9uZy5jIGIvbGliL3Bpbmdwb25nLmMKaW5kZXggYzZiNmYyZi4uODc2YTZhMiAxMDA2NDQKLS0tIGEvbGliL3Bpbmdwb25nLmMKKysrIGIvbGliL3Bpbmdwb25nLmMKQEAgLTMyMiw3ICszMjIsNyBAQAogICAgICAgICovCiAgICAgICBERUJVR0FTU0VSVCgocHRyK3BwLT5jYWNoZV9zaXplKSA8PSAoYnVmK0JVRlNJWkUrMSkpOwogICAgICAgbWVtY3B5KHB0ciwgcHAtPmNhY2hlLCBwcC0+Y2FjaGVfc2l6ZSk7Ci0gICAgICBnb3RieXRlcyA9IHBwLT5jYWNoZV9zaXplOworICAgICAgZ290Ynl0ZXMgPSAoc3NpemVfdClwcC0+Y2FjaGVfc2l6ZTsKICAgICAgIGZyZWUocHAtPmNhY2hlKTsgICAgLyogZnJlZSB0aGUgY2FjaGUgKi8KICAgICAgIHBwLT5jYWNoZSA9IE5VTEw7ICAgLyogY2xlYXIgdGhlIHBvaW50ZXIgKi8KICAgICAgIHBwLT5jYWNoZV9zaXplID0gMDsgLyogemVybyB0aGUgc2l6ZSBqdXN0IGluIGNhc2UgKi8KQEAgLTM0MCw4ICszNDAsNyBAQAogI2lmIGRlZmluZWQoSEFWRV9LUkI0KSB8fCBkZWZpbmVkKEhBVkVfR1NTQVBJKQogICAgICAgY29ubi0+ZGF0YV9wcm90ID0gcHJvdDsKICNlbmRpZgotICAgICAgaWYocmVzIDwgMCkKLSAgICAgICAgLyogRVdPVUxEQkxPQ0sgKi8KKyAgICAgIGlmKHJlcyA9PSBDVVJMRV9BR0FJTikKICAgICAgICAgcmV0dXJuIENVUkxFX09LOyAvKiByZXR1cm4gKi8KIAogI2lmZGVmIENVUkxfRE9FU19DT05WRVJTSU9OUwpAQCAtMzg3LDggKzM4Niw4IEBACiAgICAgICAgICAgaWYoIWNvbm4tPnNlY19jb21wbGV0ZSkKICNlbmRpZgogICAgICAgICAgICAgaWYoZGF0YS0+c2V0LnZlcmJvc2UpCi0gICAgICAgICAgICBDdXJsX2RlYnVnKGRhdGEsIENVUkxJTkZPX0hFQURFUl9JTiwKLSAgICAgICAgICAgICAgICAgICAgICAgcHAtPmxpbmVzdGFydF9yZXNwLCAoc2l6ZV90KXBlcmxpbmUsIGNvbm4pOworICAgICAgICAgICAgICBDdXJsX2RlYnVnKGRhdGEsIENVUkxJTkZPX0hFQURFUl9JTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBwcC0+bGluZXN0YXJ0X3Jlc3AsIChzaXplX3QpcGVybGluZSwgY29ubik7CiAKICAgICAgICAgICAvKgogICAgICAgICAgICAqIFdlIHBhc3MgYWxsIHJlc3BvbnNlLWxpbmVzIHRvIHRoZSBjYWxsYmFjayBmdW5jdGlvbiByZWdpc3RlcmVkCmRpZmYgLS1naXQgYS9saWIvcGluZ3BvbmcuaCBiL2xpYi9waW5ncG9uZy5oCmluZGV4IGE2MjlhZWUuLmNiYmZmOGYgMTAwNjQ0Ci0tLSBhL2xpYi9waW5ncG9uZy5oCisrKyBiL2xpYi9waW5ncG9uZy5oCkBAIC03LDcgKzcsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKLSAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMDcsIDIwMDksIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDEwLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCkBAIC01Niw3ICs1Niw3IEBACiAgIHN0cnVjdCB0aW1ldmFsIHJlc3BvbnNlOyAvKiBzZXQgdG8gQ3VybF90dm5vdygpIHdoZW4gYSBjb21tYW5kIGhhcyBiZWVuIHNlbnQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZiwgdXNlZCB0byB0aW1lLW91dCByZXNwb25zZSByZWFkaW5nICovCiAgIGxvbmcgcmVzcG9uc2VfdGltZTsgLyogV2hlbiBubyB0aW1lb3V0IGlzIGdpdmVuLCB0aGlzIGlzIHRoZSBhbW91bnQgb2YKLSAgICAgICAgICAgICAgICAgICAgICAgICBzZWNvbmRzIHdlIGF3YWl0IGZvciBhIHNlcnZlciByZXNwb25zZS4gKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICBtaWxsaXNlY29uZHMgd2UgYXdhaXQgZm9yIGEgc2VydmVyIHJlc3BvbnNlLiAqLwogCiAgIHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubjsgLyogcG9pbnRzIHRvIHRoZSBjb25uZWN0ZGF0YSBzdHJ1Y3QgdGhhdCB0aGlzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVsb25ncyB0byAqLwpkaWZmIC0tZ2l0IGEvbGliL3BvbGFyc3NsLmMgYi9saWIvcG9sYXJzc2wuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lODFlNjYwCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3BvbGFyc3NsLmMKQEAgLTAsMCArMSwzNzUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMCwgSG9pLUhvIENoYW4sIDxob2loby5jaGFuQGdtYWlsLmNvbT4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyAqCisgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKiBTb3VyY2UgZmlsZSBmb3IgYWxsIFBvbGFyU1NMLXNwZWNpZmljIGNvZGUgZm9yIHRoZSBUTFMvU1NMIGxheWVyLiBObyBjb2RlCisgKiBidXQgc3NsZ2VuLmMgc2hvdWxkIGV2ZXIgY2FsbCBvciB1c2UgdGhlc2UgZnVuY3Rpb25zLgorICoKKyAqLworCisjaW5jbHVkZSAic2V0dXAuaCIKKyNpZmRlZiBVU0VfUE9MQVJTU0wKKworI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPGN0eXBlLmg+CisjaWZkZWYgSEFWRV9TWVNfU09DS0VUX0gKKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjZW5kaWYKKworI2luY2x1ZGUgPHBvbGFyc3NsL25ldC5oPgorI2luY2x1ZGUgPHBvbGFyc3NsL3NzbC5oPgorI2luY2x1ZGUgPHBvbGFyc3NsL2hhdmVnZS5oPgorI2luY2x1ZGUgPHBvbGFyc3NsL2NlcnRzLmg+CisjaW5jbHVkZSA8cG9sYXJzc2wveDUwOS5oPgorCisjaW5jbHVkZSAidXJsZGF0YS5oIgorI2luY2x1ZGUgInNlbmRmLmgiCisjaW5jbHVkZSAiaW5ldF9wdG9uLmgiCisjaW5jbHVkZSAicG9sYXJzc2wuaCIKKyNpbmNsdWRlICJzc2xnZW4uaCIKKyNpbmNsdWRlICJwYXJzZWRhdGUuaCIKKyNpbmNsdWRlICJjb25uZWN0LmgiIC8qIGZvciB0aGUgY29ubmVjdCB0aW1lb3V0ICovCisjaW5jbHVkZSAic2VsZWN0LmgiCisjaW5jbHVkZSAicmF3c3RyLmgiCisKKyNkZWZpbmUgX01QUklOVEZfUkVQTEFDRSAvKiB1c2Ugb3VyIGZ1bmN0aW9ucyBvbmx5ICovCisjaW5jbHVkZSA8Y3VybC9tcHJpbnRmLmg+CisjaW5jbHVkZSAiY3VybF9tZW1vcnkuaCIKKy8qIFRoZSBsYXN0ICNpbmNsdWRlIGZpbGUgc2hvdWxkIGJlOiAqLworI2luY2x1ZGUgIm1lbWRlYnVnLmgiCisKKy8qIERlZmluZSB0aGlzIHRvIGVuYWJsZSBsb3RzIG9mIGRlYnVnZ2luZyBmb3IgUG9sYXJTU0wgKi8KKyN1bmRlZiBQT0xBUlNTTF9ERUJVRworCisjaWZkZWYgUE9MQVJTU0xfREVCVUcKK3N0YXRpYyB2b2lkIHBvbGFyc3NsX2RlYnVnKHZvaWQgKmNvbnRleHQsIGludCBsZXZlbCwgY2hhciAqbGluZSkKK3sKKyAgc3RydWN0IFNlc3Npb25IYW5kbGUgKmRhdGEgPSBOVUxMOworCisgIGlmKCFjb250ZXh0KQorICAgIHJldHVybjsKKworICBkYXRhID0gKHN0cnVjdCBTZXNzaW9uSGFuZGxlICopY29udGV4dDsKKworICBpbmZvZihkYXRhLCAiJXMiLCBsaW5lKTsKK30KKyNlbHNlCisjZW5kaWYKKworc3RhdGljIEN1cmxfcmVjdiBwb2xhcnNzbF9yZWN2Oworc3RhdGljIEN1cmxfc2VuZCBwb2xhcnNzbF9zZW5kOworCisvKgorICogVGhpcyBmdW5jdGlvbiBsb2FkcyBhbGwgdGhlIGNsaWVudC9DQSBjZXJ0aWZpY2F0ZXMgYW5kIENSTHMuIFNldHVwIHRoZSBUTFMKKyAqIGxheWVyIGFuZCBkbyBhbGwgbmVjZXNzYXJ5IG1hZ2ljLgorICovCitDVVJMY29kZQorQ3VybF9wb2xhcnNzbF9jb25uZWN0KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICBpbnQgc29ja2luZGV4KQoreworICBzdHJ1Y3QgU2Vzc2lvbkhhbmRsZSAqZGF0YSA9IGNvbm4tPmRhdGE7CisgIGJvb2wgc25pID0gVFJVRTsgLyogZGVmYXVsdCBpcyBTTkkgZW5hYmxlZCAqLworICBpbnQgcmV0ID0gLTE7CisjaWZkZWYgRU5BQkxFX0lQVjYKKyAgc3RydWN0IGluNl9hZGRyIGFkZHI7CisjZWxzZQorICBzdHJ1Y3QgaW5fYWRkciBhZGRyOworI2VuZGlmCisgIHZvaWQgKm9sZF9zZXNzaW9uID0gTlVMTDsKKyAgc2l6ZV90IG9sZF9zZXNzaW9uX3NpemUgPSAwOworICBjaGFyIGJ1ZmZlclsxMDI0XTsKKworICBpZihjb25uLT5zc2xbc29ja2luZGV4XS5zdGF0ZSA9PSBzc2xfY29ubmVjdGlvbl9jb21wbGV0ZSkKKyAgICByZXR1cm4gQ1VSTEVfT0s7CisKKyAgLyogUG9sYXJTU0wgb25seSBzdXBwb3J0cyBTU0x2MyBhbmQgVExTdjEgKi8KKyAgaWYoZGF0YS0+c2V0LnNzbC52ZXJzaW9uID09IENVUkxfU1NMVkVSU0lPTl9TU0x2MikgeworICAgIGZhaWxmKGRhdGEsICJQb2xhclNTTCBkb2VzIG5vdCBzdXBwb3J0IFNTTHYyIik7CisgICAgcmV0dXJuIENVUkxFX1NTTF9DT05ORUNUX0VSUk9SOworICB9IGVsc2UgaWYoZGF0YS0+c2V0LnNzbC52ZXJzaW9uID09IENVUkxfU1NMVkVSU0lPTl9TU0x2MykgeworICAgIHNuaSA9IEZBTFNFOyAvKiBTU0x2MyBoYXMgbm8gU05JICovCisgIH0KKworICBoYXZlZ2VfaW5pdCgmY29ubi0+c3NsW3NvY2tpbmRleF0uaHMpOworCisgIC8qIExvYWQgdGhlIHRydXN0ZWQgQ0EgKi8KKyAgbWVtc2V0KCZjb25uLT5zc2xbc29ja2luZGV4XS5jYWNlcnQsIDAsIHNpemVvZih4NTA5X2NlcnQpKTsKKworICBpZihkYXRhLT5zZXQuc3RyW1NUUklOR19TU0xfQ0FGSUxFXSkgeworICAgIHJldCA9IHg1MDlwYXJzZV9jcnRmaWxlKCZjb25uLT5zc2xbc29ja2luZGV4XS5jYWNlcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS0+c2V0LnN0cltTVFJJTkdfU1NMX0NBRklMRV0pOworCisgICAgaWYocmV0KSB7CisgICAgICBmYWlsZihkYXRhLCAiRXJyb3IgcmVhZGluZyBjYSBjZXJ0IGZpbGUgJXM6IC0weCUwNFgiLAorICAgICAgICAgICAgZGF0YS0+c2V0LnN0cltTVFJJTkdfU1NMX0NBRklMRV0sIC1yZXQpOworCisgICAgICBpZihkYXRhLT5zZXQuc3NsLnZlcmlmeXBlZXIpCisgICAgICAgIHJldHVybiBDVVJMRV9TU0xfQ0FDRVJUX0JBREZJTEU7CisgICAgfQorICB9CisKKyAgLyogTG9hZCB0aGUgY2xpZW50IGNlcnRpZmljYXRlICovCisgIG1lbXNldCgmY29ubi0+c3NsW3NvY2tpbmRleF0uY2xpY2VydCwgMCwgc2l6ZW9mKHg1MDlfY2VydCkpOworCisgIGlmKGRhdGEtPnNldC5zdHJbU1RSSU5HX0NFUlRdKSB7CisgICAgcmV0ID0geDUwOXBhcnNlX2NydGZpbGUoJmNvbm4tPnNzbFtzb2NraW5kZXhdLmNsaWNlcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS0+c2V0LnN0cltTVFJJTkdfQ0VSVF0pOworCisgICAgaWYocmV0KSB7CisgICAgICBmYWlsZihkYXRhLCAiRXJyb3IgcmVhZGluZyBjbGllbnQgY2VydCBmaWxlICVzOiAtMHglMDRYIiwKKyAgICAgICAgICAgIGRhdGEtPnNldC5zdHJbU1RSSU5HX0NFUlRdLCAtcmV0KTsKKyAgICAgIHJldHVybiBDVVJMRV9TU0xfQ0VSVFBST0JMRU07CisgICAgfQorICB9CisKKyAgLyogTG9hZCB0aGUgY2xpZW50IHByaXZhdGUga2V5ICovCisgIGlmKGRhdGEtPnNldC5zdHJbU1RSSU5HX0tFWV0pIHsKKyAgICByZXQgPSB4NTA5cGFyc2Vfa2V5ZmlsZSgmY29ubi0+c3NsW3NvY2tpbmRleF0ucnNhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtPnNldC5zdHJbU1RSSU5HX0tFWV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS0+c2V0LnN0cltTVFJJTkdfS0VZX1BBU1NXRF0pOworCisgICAgaWYocmV0KSB7CisgICAgICBmYWlsZihkYXRhLCAiRXJyb3IgcmVhZGluZyBwcml2YXRlIGtleSAlczogLTB4JTA0WCIsCisgICAgICAgICAgICBkYXRhLT5zZXQuc3RyW1NUUklOR19LRVldLCAtcmV0KTsKKyAgICAgIHJldHVybiBDVVJMRV9TU0xfQ0VSVFBST0JMRU07CisgICAgfQorICB9CisKKyAgLyogTG9hZCB0aGUgQ1JMICovCisgIG1lbXNldCgmY29ubi0+c3NsW3NvY2tpbmRleF0uY3JsLCAwLCBzaXplb2YoeDUwOV9jcmwpKTsKKworICBpZihkYXRhLT5zZXQuc3RyW1NUUklOR19TU0xfQ1JMRklMRV0pIHsKKyAgICByZXQgPSB4NTA5cGFyc2VfY3JsZmlsZSgmY29ubi0+c3NsW3NvY2tpbmRleF0uY3JsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtPnNldC5zdHJbU1RSSU5HX1NTTF9DUkxGSUxFXSk7CisKKyAgICBpZihyZXQpIHsKKyAgICAgIGZhaWxmKGRhdGEsICJFcnJvciByZWFkaW5nIENSTCBmaWxlICVzOiAtMHglMDRYIiwKKyAgICAgICAgICAgIGRhdGEtPnNldC5zdHJbU1RSSU5HX1NTTF9DUkxGSUxFXSwgLXJldCk7CisgICAgICByZXR1cm4gQ1VSTEVfU1NMX0NSTF9CQURGSUxFOworICAgIH0KKyAgfQorCisgIGluZm9mKGRhdGEsICJQb2xhclNTTDogQ29ubmVjdGVkIHRvICVzOiVkXG4iLAorICAgICAgICBjb25uLT5ob3N0Lm5hbWUsIGNvbm4tPnJlbW90ZV9wb3J0KTsKKworICBoYXZlZ2VfaW5pdCgmY29ubi0+c3NsW3NvY2tpbmRleF0uaHMpOworCisgIGlmKHNzbF9pbml0KCZjb25uLT5zc2xbc29ja2luZGV4XS5zc2wpKSB7CisgICAgZmFpbGYoZGF0YSwgIlBvbGFyU1NMOiBzc2xfaW5pdCBmYWlsZWQiKTsKKyAgICByZXR1cm4gQ1VSTEVfU1NMX0NPTk5FQ1RfRVJST1I7CisgIH0KKworICBzc2xfc2V0X2VuZHBvaW50KCZjb25uLT5zc2xbc29ja2luZGV4XS5zc2wsIFNTTF9JU19DTElFTlQpOworICBzc2xfc2V0X2F1dGhtb2RlKCZjb25uLT5zc2xbc29ja2luZGV4XS5zc2wsIFNTTF9WRVJJRllfT1BUSU9OQUwpOworCisgIHNzbF9zZXRfcm5nKCZjb25uLT5zc2xbc29ja2luZGV4XS5zc2wsIGhhdmVnZV9yYW5kLAorICAgICAgICAgICAgICAmY29ubi0+c3NsW3NvY2tpbmRleF0uaHMpOworICBzc2xfc2V0X2JpbygmY29ubi0+c3NsW3NvY2tpbmRleF0uc3NsLAorICAgICAgICAgICAgICBuZXRfcmVjdiwgJmNvbm4tPnNvY2tbc29ja2luZGV4XSwKKyAgICAgICAgICAgICAgbmV0X3NlbmQsICZjb25uLT5zb2NrW3NvY2tpbmRleF0pOworCisgIHNzbF9zZXRfY2lwaGVycygmY29ubi0+c3NsW3NvY2tpbmRleF0uc3NsLCBzc2xfZGVmYXVsdF9jaXBoZXJzKTsKKworICBpZighQ3VybF9zc2xfZ2V0c2Vzc2lvbmlkKGNvbm4sICZvbGRfc2Vzc2lvbiwgJm9sZF9zZXNzaW9uX3NpemUpKSB7CisgICAgbWVtY3B5KCZjb25uLT5zc2xbc29ja2luZGV4XS5zc24sIG9sZF9zZXNzaW9uLCBvbGRfc2Vzc2lvbl9zaXplKTsKKyAgICBpbmZvZihkYXRhLCAiUG9sYXJTU0wgcmUtdXNpbmcgc2Vzc2lvblxuIik7CisgIH0KKworICBzc2xfc2V0X3Nlc3Npb24oJmNvbm4tPnNzbFtzb2NraW5kZXhdLnNzbCwgMSwgNjAwLAorICAgICAgICAgICAgICAgICAgJmNvbm4tPnNzbFtzb2NraW5kZXhdLnNzbik7CisKKyAgc3NsX3NldF9jYV9jaGFpbigmY29ubi0+c3NsW3NvY2tpbmRleF0uc3NsLAorICAgICAgICAgICAgICAgICAgICZjb25uLT5zc2xbc29ja2luZGV4XS5jYWNlcnQsCisgICAgICAgICAgICAgICAgICAgJmNvbm4tPnNzbFtzb2NraW5kZXhdLmNybCwKKyAgICAgICAgICAgICAgICAgICBjb25uLT5ob3N0Lm5hbWUpOworCisgIHNzbF9zZXRfb3duX2NlcnQoJmNvbm4tPnNzbFtzb2NraW5kZXhdLnNzbCwKKyAgICAgICAgICAgICAgICAgICAmY29ubi0+c3NsW3NvY2tpbmRleF0uY2xpY2VydCwgJmNvbm4tPnNzbFtzb2NraW5kZXhdLnJzYSk7CisKKyAgaWYoIUN1cmxfaW5ldF9wdG9uKEFGX0lORVQsIGNvbm4tPmhvc3QubmFtZSwgJmFkZHIpICYmCisjaWZkZWYgRU5BQkxFX0lQVjYKKyAgICAgIUN1cmxfaW5ldF9wdG9uKEFGX0lORVQ2LCBjb25uLT5ob3N0Lm5hbWUsICZhZGRyKSAmJgorI2VuZGlmCisgICAgIHNuaSAmJiBzc2xfc2V0X2hvc3RuYW1lKCZjb25uLT5zc2xbc29ja2luZGV4XS5zc2wsIGNvbm4tPmhvc3QubmFtZSkpIHsKKyAgICAgaW5mb2YoZGF0YSwgIldBUk5JTkc6IGZhaWxlZCB0byBjb25maWd1cmUgIgorICAgICAgICAgICAgICAgICAic2VydmVyIG5hbWUgaW5kaWNhdGlvbiAoU05JKSBUTFMgZXh0ZW5zaW9uXG4iKTsKKyAgfQorCisgIGluZm9mKGRhdGEsICJQb2xhclNTTDogcGVyZm9ybWluZyBTU0wvVExTIGhhbmRzaGFrZS4uLlxuIik7CisKKyNpZmRlZiBQT0xBUlNTTF9ERUJVRworICBzc2xfc2V0X2RiZygmY29ubi0+c3NsW3NvY2tpbmRleF0uc3NsLCBwb2xhcnNzbF9kZWJ1ZywgZGF0YSk7CisjZW5kaWYKKworICBkbyB7CisgICAgaWYgKCEocmV0ID0gc3NsX2hhbmRzaGFrZSgmY29ubi0+c3NsW3NvY2tpbmRleF0uc3NsKSkpIHsKKyAgICAgIGJyZWFrOworICAgIH0gZWxzZSBpZihyZXQgIT0gUE9MQVJTU0xfRVJSX05FVF9UUllfQUdBSU4pIHsKKyAgICAgIGZhaWxmKGRhdGEsICJzc2xfaGFuZHNoYWtlIHJldHVybmVkIC0weCUwNFgiLCAtcmV0KTsKKyAgICAgIHJldHVybiBDVVJMRV9TU0xfQ09OTkVDVF9FUlJPUjsKKyAgICB9IGVsc2UgeworICAgICAgLyogd2FpdCBmb3IgZGF0YSBmcm9tIHNlcnZlci4uLiAqLworICAgICAgbG9uZyB0aW1lb3V0X21zID0gQ3VybF90aW1lbGVmdChjb25uLCBOVUxMLCBUUlVFKTsKKworICAgICAgaWYodGltZW91dF9tcyA8IDApIHsKKyAgICAgICAgZmFpbGYoZGF0YSwgIlNTTCBjb25uZWN0aW9uIHRpbWVvdXQiKTsKKyAgICAgICAgcmV0dXJuIENVUkxFX09QRVJBVElPTl9USU1FRE9VVDsKKyAgICAgIH0KKworICAgICAgc3dpdGNoKEN1cmxfc29ja2V0X3JlYWR5KGNvbm4tPnNvY2tbc29ja2luZGV4XSwKKyAgICAgICAgICAgICAgICAgICAgICAgIENVUkxfU09DS0VUX0JBRCwgdGltZW91dF9tcykpIHsKKyAgICAgIGNhc2UgMDoKKyAgICAgICAgZmFpbGYoZGF0YSwgIlNTTCBoYW5kc2hha2UgdGltZW91dCIpOworICAgICAgICByZXR1cm4gQ1VSTEVfT1BFUkFUSU9OX1RJTUVET1VUOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgQ1VSTF9DU0VMRUNUX0lOOgorICAgICAgICBjb250aW51ZTsKKyAgICAgICAgYnJlYWs7CisgICAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gQ1VSTEVfU1NMX0NPTk5FQ1RfRVJST1I7CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgIH0KKyAgfSB3aGlsZSAoMSk7CisKKyAgaW5mb2YoZGF0YSwgIlBvbGFyU1NMOiBIYW5kc2hha2UgY29tcGxldGUsIGNpcGhlciBpcyAlc1xuIiwKKyAgICAgICAgc3NsX2dldF9jaXBoZXIoJmNvbm4tPnNzbFtzb2NraW5kZXhdLnNzbCkpOworCisgIHJldCA9IHNzbF9nZXRfdmVyaWZ5X3Jlc3VsdCgmY29ubi0+c3NsW3NvY2tpbmRleF0uc3NsKTsKKworICBpZihyZXQgJiYgZGF0YS0+c2V0LnNzbC52ZXJpZnlwZWVyKSB7CisgICAgaWYocmV0ICYgQkFEQ0VSVF9FWFBJUkVEKQorICAgICAgZmFpbGYoZGF0YSwgIkNlcnQgdmVyaWZ5IGZhaWxlZDogQkFEQ0VSVF9FWFBJUkVEXG4iKTsKKworICAgIGlmKHJldCAmIEJBRENFUlRfUkVWT0tFRCkKKyAgICAgIGZhaWxmKGRhdGEsICJDZXJ0IHZlcmlmeSBmYWlsZWQ6IEJBRENFUlRfUkVWT0tFRCIpOworCisgICAgaWYocmV0ICYgQkFEQ0VSVF9DTl9NSVNNQVRDSCkKKyAgICAgIGZhaWxmKGRhdGEsICJDZXJ0IHZlcmlmeSBmYWlsZWQ6IEJBRENFUlRfQ05fTUlTTUFUQ0giKTsKKworICAgIGlmKHJldCAmIEJBRENFUlRfTk9UX1RSVVNURUQpCisgICAgICBmYWlsZihkYXRhLCAiQ2VydCB2ZXJpZnkgZmFpbGVkOiBCQURDRVJUX05PVF9UUlVTVEVEIik7CisKKyAgICByZXR1cm4gQ1VSTEVfU1NMX0NBQ0VSVDsKKyAgfQorCisgIGlmKGNvbm4tPnNzbFtzb2NraW5kZXhdLnNzbC5wZWVyX2NlcnQpIHsKKyAgICAvKiBJZiB0aGUgc2Vzc2lvbiB3YXMgcmVzdW1lZCwgdGhlcmUgd2lsbCBiZSBubyBwZWVyIGNlcnRzICovCisgICAgbWVtc2V0KGJ1ZmZlciwgMCwgc2l6ZW9mKGJ1ZmZlcikpOworCisgICAgaWYoeDUwOXBhcnNlX2NlcnRfaW5mbyhidWZmZXIsIHNpemVvZihidWZmZXIpLCAoY2hhciAqKSIqICIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25uLT5zc2xbc29ja2luZGV4XS5zc2wucGVlcl9jZXJ0KSAhPSAtMSkKKyAgICAgIGluZm9mKGRhdGEsICJEdW1waW5nIGNlcnQgaW5mbzpcbiVzXG4iLCBidWZmZXIpOworICB9CisKKyAgY29ubi0+c3NsW3NvY2tpbmRleF0uc3RhdGUgPSBzc2xfY29ubmVjdGlvbl9jb21wbGV0ZTsKKyAgY29ubi0+cmVjdltzb2NraW5kZXhdID0gcG9sYXJzc2xfcmVjdjsKKyAgY29ubi0+c2VuZFtzb2NraW5kZXhdID0gcG9sYXJzc2xfc2VuZDsKKworICAvKiBTYXZlIHRoZSBjdXJyZW50IHNlc3Npb24gZGF0YSBmb3IgcG9zc2libGUgcmUtdXNlICovCisgIHsKKyAgICB2b2lkICpuZXdfc2Vzc2lvbiA9IG1hbGxvYyhzaXplb2YoY29ubi0+c3NsW3NvY2tpbmRleF0uc3NuKSk7CisKKyAgICBpZihuZXdfc2Vzc2lvbikgeworICAgICAgbWVtY3B5KG5ld19zZXNzaW9uLCAmY29ubi0+c3NsW3NvY2tpbmRleF0uc3NuLAorICAgICAgICAgICAgIHNpemVvZihjb25uLT5zc2xbc29ja2luZGV4XS5zc24pKTsKKworICAgICAgaWYob2xkX3Nlc3Npb24pCisgICAgICAgIEN1cmxfc3NsX2RlbHNlc3Npb25pZChjb25uLCBvbGRfc2Vzc2lvbik7CisKKyAgICAgIHJldHVybiBDdXJsX3NzbF9hZGRzZXNzaW9uaWQoY29ubiwgbmV3X3Nlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihjb25uLT5zc2xbc29ja2luZGV4XS5zc24pKTsKKyAgICB9CisgIH0KKworICByZXR1cm4gQ1VSTEVfT0s7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHBvbGFyc3NsX3NlbmQoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc29ja2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICptZW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENVUkxjb2RlICpjdXJsY29kZSkKK3sKKyAgaW50IHJldCA9IC0xOworCisgIHJldCA9IHNzbF93cml0ZSgmY29ubi0+c3NsW3NvY2tpbmRleF0uc3NsLAorICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGNoYXIgKiltZW0sIGxlbik7CisKKyAgaWYocmV0IDwgMCkgeworICAgICpjdXJsY29kZSA9IChyZXQgPT0gUE9MQVJTU0xfRVJSX05FVF9UUllfQUdBSU4pID8KKyAgICAgIENVUkxFX0FHQUlOIDogQ1VSTEVfU0VORF9FUlJPUjsKKyAgICByZXQgPSAtMTsKKyAgfQorCisgIHJldHVybiByZXQ7Cit9CisKK3ZvaWQgQ3VybF9wb2xhcnNzbF9jbG9zZV9hbGwoc3RydWN0IFNlc3Npb25IYW5kbGUgKmRhdGEpCit7CisgICh2b2lkKWRhdGE7Cit9CisKK3ZvaWQgQ3VybF9wb2xhcnNzbF9jbG9zZShzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGludCBzb2NraW5kZXgpCit7CisgIHJzYV9mcmVlKCZjb25uLT5zc2xbc29ja2luZGV4XS5yc2EpOworICB4NTA5X2ZyZWUoJmNvbm4tPnNzbFtzb2NraW5kZXhdLmNsaWNlcnQpOworICB4NTA5X2ZyZWUoJmNvbm4tPnNzbFtzb2NraW5kZXhdLmNhY2VydCk7CisgIHg1MDlfY3JsX2ZyZWUoJmNvbm4tPnNzbFtzb2NraW5kZXhdLmNybCk7CisgIHNzbF9mcmVlKCZjb25uLT5zc2xbc29ja2luZGV4XS5zc2wpOworfQorCitzdGF0aWMgc3NpemVfdCBwb2xhcnNzbF9yZWN2KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG51bSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgYnVmZmVyc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1VSTGNvZGUgKmN1cmxjb2RlKQoreworICBpbnQgcmV0ID0gLTE7CisgIHNzaXplX3QgbGVuID0gLTE7CisKKyAgbWVtc2V0KGJ1ZiwgMCwgYnVmZmVyc2l6ZSk7CisgIHJldCA9IHNzbF9yZWFkKCZjb25uLT5zc2xbbnVtXS5zc2wsICh1bnNpZ25lZCBjaGFyICopYnVmLCBidWZmZXJzaXplKTsKKworICBpZihyZXQgPD0gMCkgeworICAgICpjdXJsY29kZSA9IChyZXQgPT0gUE9MQVJTU0xfRVJSX05FVF9UUllfQUdBSU4pID8KKyAgICAgIENVUkxFX0FHQUlOIDogQ1VSTEVfUkVDVl9FUlJPUjsKKyAgICByZXR1cm4gLTE7CisgIH0KKworICBsZW4gPSByZXQ7CisKKyAgcmV0dXJuIGxlbjsKK30KKwordm9pZCBDdXJsX3BvbGFyc3NsX3Nlc3Npb25fZnJlZSh2b2lkICpwdHIpCit7CisgIGZyZWUocHRyKTsKK30KKworc2l6ZV90IEN1cmxfcG9sYXJzc2xfdmVyc2lvbihjaGFyICpidWZmZXIsIHNpemVfdCBzaXplKQoreworICByZXR1cm4gc25wcmludGYoYnVmZmVyLCBzaXplLCAiUG9sYXJTU0wiKTsKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWIvcG9sYXJzc2wuaCBiL2xpYi9wb2xhcnNzbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2NGFmMTcKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcG9sYXJzc2wuaApAQCAtMCwwICsxLDU3IEBACisjaWZuZGVmIEhFQURFUl9DVVJMX1BPTEFSU1NMX0gKKyNkZWZpbmUgSEVBREVSX0NVUkxfUE9MQVJTU0xfSAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisgKgorICogQ29weXJpZ2h0IChDKSAyMDEwLCBIb2ktSG8gQ2hhbiwgPGhvaWhvLmNoYW5AZ21haWwuY29tPgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICogJElkOiBwb2xhcnNzbC5oLHYgMS4xMCAyMDA5LTAyLTEyIDIwOjQ4OjQzIGRhbmYgRXhwICQKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZmRlZiBVU0VfUE9MQVJTU0wKKworQ1VSTGNvZGUgQ3VybF9wb2xhcnNzbF9jb25uZWN0KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgaW50IHNvY2tpbmRleCk7CisKKy8qIHRlbGwgUG9sYXJTU0wgdG8gY2xvc2UgZG93biBhbGwgb3BlbiBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29ubmVjdGlvbnMgKGFuZAorICAgdGh1cyBzZXNzaW9uIElEIGNhY2hpbmcgZXRjKSAqLwordm9pZCBDdXJsX3BvbGFyc3NsX2Nsb3NlX2FsbChzdHJ1Y3QgU2Vzc2lvbkhhbmRsZSAqZGF0YSk7CisKKyAvKiBjbG9zZSBhIFNTTCBjb25uZWN0aW9uICovCit2b2lkIEN1cmxfcG9sYXJzc2xfY2xvc2Uoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBpbnQgc29ja2luZGV4KTsKKwordm9pZCBDdXJsX3BvbGFyc3NsX3Nlc3Npb25fZnJlZSh2b2lkICpwdHIpOworc2l6ZV90IEN1cmxfcG9sYXJzc2xfdmVyc2lvbihjaGFyICpidWZmZXIsIHNpemVfdCBzaXplKTsKK2ludCBDdXJsX3BvbGFyc3NsX3NodXRkb3duKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgaW50IHNvY2tpbmRleCk7CisKKy8qIEFQSSBzZXR1cCBmb3IgUG9sYXJTU0wgKi8KKyNkZWZpbmUgY3VybHNzbF9pbml0KCkgKDEpCisjZGVmaW5lIGN1cmxzc2xfY2xlYW51cCgpCisjZGVmaW5lIGN1cmxzc2xfY29ubmVjdCBDdXJsX3BvbGFyc3NsX2Nvbm5lY3QKKyNkZWZpbmUgY3VybHNzbF9zZXNzaW9uX2ZyZWUoeCkgIEN1cmxfcG9sYXJzc2xfc2Vzc2lvbl9mcmVlKHgpCisjZGVmaW5lIGN1cmxzc2xfY2xvc2VfYWxsIEN1cmxfcG9sYXJzc2xfY2xvc2VfYWxsCisjZGVmaW5lIGN1cmxzc2xfY2xvc2UgQ3VybF9wb2xhcnNzbF9jbG9zZQorI2RlZmluZSBjdXJsc3NsX3NodXRkb3duKHgseSkgMAorI2RlZmluZSBjdXJsc3NsX3NldF9lbmdpbmUoeCx5KSAoeD14LCB5PXksIENVUkxFX0ZBSUxFRF9JTklUKQorI2RlZmluZSBjdXJsc3NsX3NldF9lbmdpbmVfZGVmYXVsdCh4KSAoeD14LCBDVVJMRV9GQUlMRURfSU5JVCkKKyNkZWZpbmUgY3VybHNzbF9lbmdpbmVzX2xpc3QoeCkgKHg9eCwgKHN0cnVjdCBjdXJsX3NsaXN0ICopTlVMTCkKKyNkZWZpbmUgY3VybHNzbF92ZXJzaW9uIEN1cmxfcG9sYXJzc2xfdmVyc2lvbgorI2RlZmluZSBjdXJsc3NsX2NoZWNrX2N4bih4KSAoeD14LCAtMSkKKyNkZWZpbmUgY3VybHNzbF9kYXRhX3BlbmRpbmcoeCx5KSAoeD14LCB5PXksIDApCisKKyNlbmRpZiAvKiBVU0VfUE9MQVJTU0wgKi8KKyNlbmRpZiAvKiBIRUFERVJfQ1VSTF9QT0xBUlNTTF9IICovCmRpZmYgLS1naXQgYS9saWIvcG9wMy5jIGIvbGliL3BvcDMuYwppbmRleCA0ODk0ZjNjLi45NjA5YjYyIDEwMDY0NAotLS0gYS9saWIvcG9wMy5jCisrKyBiL2xpYi9wb3AzLmMKQEAgLTMxMSwxMCArMzExLDEwIEBACiAgICAgZmFpbGYoZGF0YSwgIkFjY2VzcyBkZW5pZWQuICVjIiwgcG9wM2NvZGUpOwogICAgIHJlc3VsdCA9IENVUkxFX0xPR0lOX0RFTklFRDsKICAgfQotCi0gIC8qIHNlbmQgUEFTUyAqLwotICByZXN1bHQgPSBDdXJsX3BwX3NlbmRmKCZjb25uLT5wcm90by5wb3AzYy5wcCwgIlBBU1MgJXMiLAotICAgICAgICAgICAgICAgICAgICAgICAgIHBvcDMtPnBhc3N3ZD9wb3AzLT5wYXNzd2Q6IiIpOworICBlbHNlCisgICAgLyogc2VuZCBQQVNTICovCisgICAgcmVzdWx0ID0gQ3VybF9wcF9zZW5kZigmY29ubi0+cHJvdG8ucG9wM2MucHAsICJQQVNTICVzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcDMtPnBhc3N3ZD9wb3AzLT5wYXNzd2Q6IiIpOwogICBpZihyZXN1bHQpCiAgICAgcmV0dXJuIHJlc3VsdDsKIApAQCAtMzU5LDkgKzM1OSw4IEBACiAgIH0KIAogICAvKiBQT1AzIGRvd25sb2FkICovCi0gIHJlc3VsdD1DdXJsX3NldHVwX3RyYW5zZmVyKGNvbm4sIEZJUlNUU09DS0VULCAtMSwgRkFMU0UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcDMtPmJ5dGVjb3VudHAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xLCBOVUxMKTsgLyogbm8gdXBsb2FkIGhlcmUgKi8KKyAgQ3VybF9zZXR1cF90cmFuc2Zlcihjb25uLCBGSVJTVFNPQ0tFVCwgLTEsIEZBTFNFLAorICAgICAgICAgICAgICAgICAgICAgIHBvcDMtPmJ5dGVjb3VudHAsIC0xLCBOVUxMKTsgLyogbm8gdXBsb2FkIGhlcmUgKi8KIAogICBpZihwcC0+Y2FjaGUpIHsKICAgICAvKiBBdCB0aGlzIHBvaW50IHRoZXJlIGlzIGEgYnVuY2ggb2YgZGF0YSBpbiB0aGUgaGVhZGVyICJjYWNoZSIgdGhhdCBpcwpAQCAtNDAzLDkgKzQwMiw4IEBACiAgIH0KIAogICAvKiBQT1AzIGRvd25sb2FkICovCi0gIHJlc3VsdD1DdXJsX3NldHVwX3RyYW5zZmVyKGNvbm4sIEZJUlNUU09DS0VULCAtMSwgRkFMU0UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcDMtPmJ5dGVjb3VudHAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xLCBOVUxMKTsgLyogbm8gdXBsb2FkIGhlcmUgKi8KKyAgQ3VybF9zZXR1cF90cmFuc2Zlcihjb25uLCBGSVJTVFNPQ0tFVCwgLTEsIEZBTFNFLCBwb3AzLT5ieXRlY291bnRwLAorICAgICAgICAgICAgICAgICAgICAgIC0xLCBOVUxMKTsgLyogbm8gdXBsb2FkIGhlcmUgKi8KIAogICBpZihwcC0+Y2FjaGUpIHsKICAgICAvKiBjYWNoZSBob2xkcyB0aGUgZW1haWwgSUQgbGlzdGluZyAqLwpAQCAtODMwLDcgKzgyOCw4IEBACiAKICAgLyogVGhlIFBPUDMgc2Vzc2lvbiBtYXkgb3IgbWF5IG5vdCBoYXZlIGJlZW4gYWxsb2NhdGVkL3NldHVwIGF0IHRoaXMKICAgICAgcG9pbnQhICovCi0gICh2b2lkKXBvcDNfcXVpdChjb25uKTsgLyogaWdub3JlIGVycm9ycyBvbiB0aGUgTE9HT1VUICovCisgIGlmKHBvcDNjLT5wcC5jb25uKQorICAgICh2b2lkKXBvcDNfcXVpdChjb25uKTsgLyogaWdub3JlIGVycm9ycyBvbiB0aGUgTE9HT1VUICovCiAKIAogICBDdXJsX3BwX2Rpc2Nvbm5lY3QoJnBvcDNjLT5wcCk7CkBAIC04NTEsMTAgKzg1MCwxMSBAQAogICBzdHJ1Y3QgcG9wM19jb25uICpwb3AzYyA9ICZjb25uLT5wcm90by5wb3AzYzsKICAgc3RydWN0IFNlc3Npb25IYW5kbGUgKmRhdGEgPSBjb25uLT5kYXRhOwogICBjb25zdCBjaGFyICpwYXRoID0gZGF0YS0+c3RhdGUucGF0aDsKLSAgaW50IGxlbjsKIAogICAvKiB1cmwgZGVjb2RlIHRoZSBwYXRoIGFuZCB1c2UgdGhpcyBtYWlsYm94ICovCi0gIHBvcDNjLT5tYWlsYm94ID0gY3VybF9lYXN5X3VuZXNjYXBlKGRhdGEsIHBhdGgsIDAsICZsZW4pOworICBwb3AzYy0+bWFpbGJveCA9IGN1cmxfZWFzeV91bmVzY2FwZShkYXRhLCBwYXRoLCAwLCBOVUxMKTsKKyAgaWYgKCFwb3AzYy0+bWFpbGJveCkKKyAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKIAogICByZXR1cm4gQ1VSTEVfT0s7CiB9CkBAIC04NjMsMTggKzg2MywxNyBAQAogc3RhdGljIENVUkxjb2RlIHBvcDNfZG9waGFzZV9kb25lKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGNvbm5lY3RlZCkKIHsKLSAgQ1VSTGNvZGUgcmVzdWx0ID0gQ1VSTEVfT0s7CiAgIHN0cnVjdCBGVFAgKnBvcDMgPSBjb25uLT5kYXRhLT5zdGF0ZS5wcm90by5wb3AzOwogICBzdHJ1Y3QgcG9wM19jb25uICpwb3AzYyA9ICZjb25uLT5wcm90by5wb3AzYzsKLSAodm9pZCljb25uZWN0ZWQ7CisgICh2b2lkKWNvbm5lY3RlZDsKIAogICBpZihwb3AzLT50cmFuc2ZlciAhPSBGVFBUUkFOU0ZFUl9CT0RZKQogICAgIC8qIG5vIGRhdGEgdG8gdHJhbnNmZXIgKi8KLSAgICByZXN1bHQ9Q3VybF9zZXR1cF90cmFuc2Zlcihjb25uLCAtMSwgLTEsIEZBTFNFLCBOVUxMLCAtMSwgTlVMTCk7CisgICAgQ3VybF9zZXR1cF90cmFuc2Zlcihjb25uLCAtMSwgLTEsIEZBTFNFLCBOVUxMLCAtMSwgTlVMTCk7CiAKICAgZnJlZShwb3AzYy0+bWFpbGJveCk7CiAKLSAgcmV0dXJuIHJlc3VsdDsKKyAgcmV0dXJuIENVUkxFX09LOwogfQogCiAvKiBjYWxsZWQgZnJvbSBtdWx0aS5jIHdoaWxlIERPaW5nICovCmRpZmYgLS1naXQgYS9saWIvcXNzbC5jIGIvbGliL3Fzc2wuYwppbmRleCA1YTA4YTI1Li5kZDRmOTExIDEwMDY0NAotLS0gYS9saWIvcXNzbC5jCisrKyBiL2xpYi9xc3NsLmMKQEAgLTI0Miw2ICsyNDIsOSBAQAogfQogCiAKK3N0YXRpYyBDdXJsX3JlY3YgcXNvc3NsX3JlY3Y7CitzdGF0aWMgQ3VybF9zZW5kIHFzb3NzbF9zZW5kOworCiBDVVJMY29kZSBDdXJsX3Fzb3NzbF9jb25uZWN0KHN0cnVjdCBjb25uZWN0ZGF0YSAqIGNvbm4sIGludCBzb2NraW5kZXgpCiAKIHsKQEAgLTI2Myw4ICsyNjYsMTEgQEAKICAgICAgIGNvbm5zc2wtPnN0YXRlID0gc3NsX2Nvbm5lY3Rpb25fbm9uZTsKICAgICB9CiAgIH0KLSAgaWYgKHJjID09IENVUkxFX09LKQorICBpZiAocmMgPT0gQ1VSTEVfT0spIHsKICAgICBjb25uc3NsLT5zdGF0ZSA9IHNzbF9jb25uZWN0aW9uX2NvbXBsZXRlOworICAgIGNvbm4tPnJlY3Zbc29ja2luZGV4XSA9IHFzb3NzbF9yZWN2OworICAgIGNvbm4tPnNlbmRbc29ja2luZGV4XSA9IHFzb3NzbF9zZW5kOworICB9CiAKICAgcmV0dXJuIHJjOwogfQpAQCAtMzc0LDkgKzM4MCw4IEBACiB9CiAKIAotLyogZm9yIGRvY3VtZW50YXRpb24gc2VlIEN1cmxfc3NsX3NlbmQoKSBpbiBzc2xnZW4uaCAqLwotc3NpemVfdCBDdXJsX3Fzb3NzbF9zZW5kKHN0cnVjdCBjb25uZWN0ZGF0YSAqIGNvbm4sIGludCBzb2NraW5kZXgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqIG1lbSwgc2l6ZV90IGxlbiwgaW50ICogY3VybGNvZGUpCitzdGF0aWMgc3NpemVfdCBxc29zc2xfc2VuZChzdHJ1Y3QgY29ubmVjdGRhdGEgKiBjb25uLCBpbnQgc29ja2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqIG1lbSwgc2l6ZV90IGxlbiwgQ1VSTGNvZGUgKiBjdXJsY29kZSkKIAogewogICAvKiBTU0xfV3JpdGUoKSBpcyBzYWlkIHRvIHJldHVybiAnaW50JyB3aGlsZSB3cml0ZSgpIGFuZCBzZW5kKCkgcmV0dXJucwpAQCAtMzkyLDE0ICszOTcsMTQgQEAKICAgICAgIC8qIFRoZSBvcGVyYXRpb24gZGlkIG5vdCBjb21wbGV0ZTsgdGhlIHNhbWUgU1NMIEkvTyBmdW5jdGlvbgogICAgICAgICAgc2hvdWxkIGJlIGNhbGxlZCBhZ2FpbiBsYXRlci4gVGhpcyBpcyBiYXNpY2x5IGFuIEVXT1VMREJMT0NLCiAgICAgICAgICBlcXVpdmFsZW50LiAqLwotICAgICAgKmN1cmxjb2RlID0gLTE7IC8qIEVXT1VMREJMT0NLICovCisgICAgICAqY3VybGNvZGUgPSBDVVJMRV9BR0FJTjsKICAgICAgIHJldHVybiAtMTsKIAogICAgIGNhc2UgU1NMX0VSUk9SX0lPOgogICAgICAgc3dpdGNoIChlcnJubykgewogICAgICAgY2FzZSBFV09VTERCTE9DSzoKICAgICAgIGNhc2UgRUlOVFI6Ci0gICAgICAgICpjdXJsY29kZSA9IC0xOyAvKiBFV09VTERCTE9DSyAqLworICAgICAgICAqY3VybGNvZGUgPSBDVVJMRV9BR0FJTjsKICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICB9CiAKQEAgLTQxOSw5ICs0MjQsOCBAQAogfQogCiAKLS8qIGZvciBkb2N1bWVudGF0aW9uIHNlZSBDdXJsX3NzbF9yZWN2KCkgaW4gc3NsZ2VuLmggKi8KLXNzaXplX3QgQ3VybF9xc29zc2xfcmVjdihzdHJ1Y3QgY29ubmVjdGRhdGEgKiBjb25uLCBpbnQgbnVtLCBjaGFyICogYnVmLAotICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBidWZmZXJzaXplLCBpbnQgKiBjdXJsY29kZSkKK3N0YXRpYyBzc2l6ZV90IHFzb3NzbF9yZWN2KHN0cnVjdCBjb25uZWN0ZGF0YSAqIGNvbm4sIGludCBudW0sIGNoYXIgKiBidWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgYnVmZmVyc2l6ZSwgQ1VSTGNvZGUgKiBjdXJsY29kZSkKIAogewogICBjaGFyIGVycm9yX2J1ZmZlclsxMjBdOyAvKiBPcGVuU1NMIGRvY3VtZW50cyB0aGF0IHRoaXMgbXVzdCBiZSBhdApAQCAtNDQwLDEzICs0NDQsMTMgQEAKIAogICAgIGNhc2UgU1NMX0VSUk9SX0JBRF9TVEFURToKICAgICAgIC8qIHRoZXJlJ3MgZGF0YSBwZW5kaW5nLCByZS1pbnZva2UgU1NMX1JlYWQoKS4gKi8KLSAgICAgICpjdXJsY29kZSA9IC0xOyAvKiBFV09VTERCTE9DSyAqLworICAgICAgKmN1cmxjb2RlID0gQ1VSTEVfQUdBSU47CiAgICAgICByZXR1cm4gLTE7CiAKICAgICBjYXNlIFNTTF9FUlJPUl9JTzoKICAgICAgIHN3aXRjaCAoZXJybm8pIHsKICAgICAgIGNhc2UgRVdPVUxEQkxPQ0s6Ci0gICAgICAgICpjdXJsY29kZSA9IC0xOyAvKiBFV09VTERCTE9DSyAqLworICAgICAgICAqY3VybGNvZGUgPSBDVVJMRV9BR0FJTjsKICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICB9CiAKZGlmZiAtLWdpdCBhL2xpYi9xc3NsLmggYi9saWIvcXNzbC5oCmluZGV4IGEwY2Y4Y2MuLjQ1MTkwZTYgMTAwNjQ0Ci0tLSBhL2xpYi9xc3NsLmgKKysrIGIvbGliL3Fzc2wuaApAQCAtMzYsMjAgKzM2LDYgQEAKIGludCBDdXJsX3Fzb3NzbF9jbG9zZV9hbGwoc3RydWN0IFNlc3Npb25IYW5kbGUgKiBkYXRhKTsKIGludCBDdXJsX3Fzb3NzbF9zaHV0ZG93bihzdHJ1Y3QgY29ubmVjdGRhdGEgKiBjb25uLCBpbnQgc29ja2luZGV4KTsKIAotLyogZm9yIGRvY3VtZW50YXRpb24gc2VlIEN1cmxfc3NsX3NlbmQoKSBpbiBzc2xnZW4uaCAqLwotc3NpemVfdCBDdXJsX3Fzb3NzbF9zZW5kKHN0cnVjdCBjb25uZWN0ZGF0YSAqIGNvbm4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNvY2tpbmRleCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICogbWVtLAotICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBsZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgaW50ICogY3VybGNvZGUpOwotCi0vKiBmb3IgZG9jdW1lbnRhdGlvbiBzZWUgQ3VybF9zc2xfcmVjdigpIGluIHNzbGdlbi5oICovCi1zc2l6ZV90IEN1cmxfcXNvc3NsX3JlY3Yoc3RydWN0IGNvbm5lY3RkYXRhICogY29ubiwgLyogY29ubmVjdGlvbiBkYXRhICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgaW50IG51bSwgICAgICAgICAgICAgICAgICAgLyogc29ja2V0aW5kZXggKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICogYnVmLCAgICAgICAgICAgICAgICAvKiBzdG9yZSByZWFkIGRhdGEgaGVyZSAqLwotICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBidWZmZXJzaXplLCAgICAgICAgIC8qIG1heCBhbW91bnQgdG8gcmVhZCAqLwotICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqIGN1cmxjb2RlKTsKLQogc2l6ZV90IEN1cmxfcXNvc3NsX3ZlcnNpb24oY2hhciAqIGJ1ZmZlciwgc2l6ZV90IHNpemUpOwogaW50IEN1cmxfcXNvc3NsX2NoZWNrX2N4bihzdHJ1Y3QgY29ubmVjdGRhdGEgKiBjeG4pOwogCkBAIC02Niw4ICs1Miw2IEBACiAjZGVmaW5lIGN1cmxzc2xfc2V0X2VuZ2luZSh4LHkpIENVUkxFX0ZBSUxFRF9JTklUCiAjZGVmaW5lIGN1cmxzc2xfc2V0X2VuZ2luZV9kZWZhdWx0KHgpIENVUkxFX0ZBSUxFRF9JTklUCiAjZGVmaW5lIGN1cmxzc2xfZW5naW5lc19saXN0KHgpIE5VTEwKLSNkZWZpbmUgY3VybHNzbF9zZW5kIEN1cmxfcXNvc3NsX3NlbmQKLSNkZWZpbmUgY3VybHNzbF9yZWN2IEN1cmxfcXNvc3NsX3JlY3YKICNkZWZpbmUgY3VybHNzbF92ZXJzaW9uIEN1cmxfcXNvc3NsX3ZlcnNpb24KICNkZWZpbmUgY3VybHNzbF9jaGVja19jeG4oeCkgQ3VybF9xc29zc2xfY2hlY2tfY3huKHgpCiAjZGVmaW5lIGN1cmxzc2xfZGF0YV9wZW5kaW5nKHgseSkgMApkaWZmIC0tZ2l0IGEvbGliL3J0c3AuYyBiL2xpYi9ydHNwLmMKaW5kZXggOGNjMjAwYi4uMTI1NGM3MyAxMDA2NDQKLS0tIGEvbGliL3J0c3AuYworKysgYi9saWIvcnRzcC5jCkBAIC0yNTQsOCArMjU0LDggQEAKICAgfQogCiAgIGlmKHJ0c3ByZXEgPT0gUlRTUFJFUV9SRUNFSVZFKSB7Ci0gICAgcmVzdWx0ID0gQ3VybF9zZXR1cF90cmFuc2Zlcihjb25uLCBGSVJTVFNPQ0tFVCwgLTEsIFRSVUUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaHR0cC0+cmVhZGJ5dGVjb3VudCwgLTEsIE5VTEwpOworICAgIEN1cmxfc2V0dXBfdHJhbnNmZXIoY29ubiwgRklSU1RTT0NLRVQsIC0xLCBUUlVFLAorICAgICAgICAgICAgICAgICAgICAgICAgJmh0dHAtPnJlYWRieXRlY291bnQsIC0xLCBOVUxMKTsKIAogICAgIHJldHVybiByZXN1bHQ7CiAgIH0KQEAgLTUwMywxNSArNTAzLDkgQEAKICAgICByZXR1cm4gcmVzdWx0OwogICB9CiAKLSAgcmVzdWx0ID0gQ3VybF9zZXR1cF90cmFuc2Zlcihjb25uLCBGSVJTVFNPQ0tFVCwgLTEsIFRSVUUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmh0dHAtPnJlYWRieXRlY291bnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHV0c2l6ZT9GSVJTVFNPQ0tFVDotMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXRzaXplPyZodHRwLT53cml0ZWJ5dGVjb3VudDpOVUxMKTsKLQotICBpZihyZXN1bHQpIHsKLSAgICBmYWlsZihkYXRhLCAiRmFpbGVkIFJUU1AgdHJhbnNmZXIiKTsKLSAgICByZXR1cm4gcmVzdWx0OwotICB9CisgIEN1cmxfc2V0dXBfdHJhbnNmZXIoY29ubiwgRklSU1RTT0NLRVQsIC0xLCBUUlVFLCAmaHR0cC0+cmVhZGJ5dGVjb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICBwdXRzaXplP0ZJUlNUU09DS0VUOi0xLAorICAgICAgICAgICAgICAgICAgICAgIHB1dHNpemU/Jmh0dHAtPndyaXRlYnl0ZWNvdW50Ok5VTEwpOwogCiAgIC8qIEluY3JlbWVudCB0aGUgQ1NlcSBvbiBzdWNjZXNzICovCiAgIGRhdGEtPnN0YXRlLnJ0c3BfbmV4dF9jbGllbnRfQ1NlcSsrOwpAQCAtNzE1LDcgKzcwOSw3IEBACiAgICAgd2hpbGUoKnN0YXJ0ICYmIElTU1BBQ0UoKnN0YXJ0KSkKICAgICAgIHN0YXJ0Kys7CiAKLSAgICBpZighc3RhcnQpIHsKKyAgICBpZighKnN0YXJ0KSB7CiAgICAgICBmYWlsZihkYXRhLCAiR290IGEgYmxhbmsgU2Vzc2lvbiBJRCIpOwogICAgIH0KICAgICBlbHNlIGlmKGRhdGEtPnNldC5zdHJbU1RSSU5HX1JUU1BfU0VTU0lPTl9JRF0pIHsKZGlmZiAtLWdpdCBhL2xpYi9zZWN1cml0eS5jIGIvbGliL3NlY3VyaXR5LmMKaW5kZXggMDNmYzY3OS4uNzNhNTU0MCAxMDA2NDQKLS0tIGEvbGliL3NlY3VyaXR5LmMKKysrIGIvbGliL3NlY3VyaXR5LmMKQEAgLTEwLDcgKzEwLDcgQEAKICAqIENvcHlyaWdodCAoYykgMTk5OCwgMTk5OSBLdW5nbGlnYSBUZWtuaXNrYSBI9mdza29sYW4KICAqIChSb3lhbCBJbnN0aXR1dGUgb2YgVGVjaG5vbG9neSwgU3RvY2tob2xtLCBTd2VkZW4pLgogICoKLSAqIENvcHlyaWdodCAoQykgMjAwMSAtIDIwMDksIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDEgLSAyMDEwLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgpAQCAtNDYsMTAgKzQ2LDcgQEAKICNpZm5kZWYgQ1VSTF9ESVNBQkxFX0ZUUAogI2lmIGRlZmluZWQoSEFWRV9LUkI0KSB8fCBkZWZpbmVkKEhBVkVfR1NTQVBJKQogCi0jZGVmaW5lIF9NUFJJTlRGX1JFUExBQ0UgLyogd2Ugd2FudCBjdXJsLWZ1bmN0aW9ucyBpbnN0ZWFkIG9mIG5hdGl2ZSBvbmVzICovCi0jaW5jbHVkZSA8Y3VybC9tcHJpbnRmLmg+Ci0KLSNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4KICNpbmNsdWRlIDxzdHJpbmcuaD4KIAogI2lmZGVmIEhBVkVfTkVUREJfSApAQCAtNjEsMTEgKzU4LDExIEBACiAjZW5kaWYKIAogI2luY2x1ZGUgInVybGRhdGEuaCIKLSNpbmNsdWRlICJrcmI0LmgiCiAjaW5jbHVkZSAiY3VybF9iYXNlNjQuaCIKLSNpbmNsdWRlICJzZW5kZi5oIgotI2luY2x1ZGUgImZ0cC5oIgogI2luY2x1ZGUgImN1cmxfbWVtb3J5LmgiCisjaW5jbHVkZSAia3JiNC5oIgorI2luY2x1ZGUgImZ0cC5oIgorI2luY2x1ZGUgInNlbmRmLmgiCiAjaW5jbHVkZSAicmF3c3RyLmgiCiAKIC8qIFRoZSBsYXN0ICNpbmNsdWRlIGZpbGUgc2hvdWxkIGJlOiAqLwpAQCAtOTEsOTIgKzg4LDE0MiBAQAogICByZXR1cm4gKGVudW0gcHJvdGVjdGlvbl9sZXZlbCktMTsKIH0KIAorLyogQ29udmVydCBhIHByb3RvY29sIHxsZXZlbHwgdG8gaXRzIGNoYXIgcmVwcmVzZW50YXRpb24uCisgICBXZSB0YWtlIGFuIGludCB0byBjYXRjaCBwcm9ncmFtbWluZyBtaXN0YWtlcy4gKi8KK3N0YXRpYyBjaGFyIGxldmVsX3RvX2NoYXIoaW50IGxldmVsKSB7CisgIHN3aXRjaChsZXZlbCkgeworICBjYXNlIHByb3RfY2xlYXI6CisgICAgcmV0dXJuICdDJzsKKyAgY2FzZSBwcm90X3NhZmU6CisgICAgcmV0dXJuICdTJzsKKyAgY2FzZSBwcm90X2NvbmZpZGVudGlhbDoKKyAgICByZXR1cm4gJ0UnOworICBjYXNlIHByb3RfcHJpdmF0ZToKKyAgICByZXR1cm4gJ1AnOworICBjYXNlIHByb3RfY21kOgorICAgIC8qIEZhbGwgdGhyb3VnaCAqLworICBkZWZhdWx0OgorICAgIC8qIFRob3NlIDIgY2FzZXMgc2hvdWxkIG5vdCBiZSByZWFjaGVkISAqLworICAgIGJyZWFrOworICB9CisgIERFQlVHQVNTRVJUKDApOworICAvKiBEZWZhdWx0IHRvIHRoZSBtb3N0IHNlY3VyZSBhbHRlcm5hdGl2ZS4gKi8KKyAgcmV0dXJuICdQJzsKK30KKwogc3RhdGljIGNvbnN0IHN0cnVjdCBDdXJsX3NlY19jbGllbnRfbWVjaCAqIGNvbnN0IG1lY2hzW10gPSB7Ci0jaWZkZWYgSEFWRV9HU1NBUEkKKyNpZiBkZWZpbmVkKEhBVkVfR1NTQVBJKQogICAmQ3VybF9rcmI1X2NsaWVudF9tZWNoLAogI2VuZGlmCi0jaWZkZWYgSEFWRV9LUkI0CisjaWYgZGVmaW5lZChIQVZFX0tSQjQpCiAgICZDdXJsX2tyYjRfY2xpZW50X21lY2gsCiAjZW5kaWYKICAgTlVMTAogfTsKIAotLyogVE9ETzogVGhpcyBmdW5jdGlvbiBpc24ndCBhY3R1YWxseSB1c2VkIGFueXdoZXJlIGFuZCBzaG91bGQgYmUgcmVtb3ZlZCAqLwotaW50Ci1DdXJsX3NlY19nZXRjKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgRklMRSAqRikKKy8qIFNlbmQgYW4gRlRQIGNvbW1hbmQgZGVmaW5lZCBieSB8bWVzc2FnZXwgYW5kIHRoZSBvcHRpb25hbCBhcmd1bWVudHMuIFRoZQorICAgZnVuY3Rpb24gcmV0dXJucyB0aGUgZnRwX2NvZGUuIElmIGFuIGVycm9yIG9jY3VycywgLTEgaXMgcmV0dXJuZWQuICovCitzdGF0aWMgaW50IGZ0cF9zZW5kX2NvbW1hbmQoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBjb25zdCBjaGFyICptZXNzYWdlLCAuLi4pCiB7Ci0gIGlmKGNvbm4tPnNlY19jb21wbGV0ZSAmJiBjb25uLT5kYXRhX3Byb3QpIHsKLSAgICBjaGFyIGM7Ci0gICAgaWYoQ3VybF9zZWNfcmVhZChjb25uLCBmaWxlbm8oRiksICZjLCAxKSA8PSAwKQotICAgICAgcmV0dXJuIEVPRjsKLSAgICByZXR1cm4gYzsKKyAgaW50IGZ0cF9jb2RlOworICBzc2l6ZV90IG5yZWFkOworICB2YV9saXN0IGFyZ3M7CisgIGNoYXIgcHJpbnRfYnVmZmVyWzUwXTsKKworICB2YV9zdGFydChhcmdzLCBtZXNzYWdlKTsKKyAgdnNucHJpbnRmKHByaW50X2J1ZmZlciwgc2l6ZW9mKHByaW50X2J1ZmZlciksIG1lc3NhZ2UsIGFyZ3MpOworICB2YV9lbmQoYXJncyk7CisKKyAgaWYoQ3VybF9mdHBzZW5kZihjb25uLCBwcmludF9idWZmZXIpICE9IENVUkxFX09LKSB7CisgICAgZnRwX2NvZGUgPSAtMTsKICAgfQotICBlbHNlCi0gICAgcmV0dXJuIGdldGMoRik7CisgIGVsc2UgeworICAgIGlmKEN1cmxfR2V0RlRQUmVzcG9uc2UoJm5yZWFkLCBjb25uLCAmZnRwX2NvZGUpICE9IENVUkxFX09LKQorICAgICAgZnRwX2NvZGUgPSAtMTsKKyAgfQorCisgICh2b2lkKW5yZWFkOyAvKiBVbnVzZWQgKi8KKyAgcmV0dXJuIGZ0cF9jb2RlOwogfQogCi1zdGF0aWMgaW50Ci1ibG9ja19yZWFkKGludCBmZCwgdm9pZCAqYnVmLCBzaXplX3QgbGVuKQorLyogUmVhZCB8bGVufCBmcm9tIHRoZSBzb2NrZXQgfGZkfCBhbmQgc3RvcmUgaXQgaW4gfHRvfC4gUmV0dXJuIGEgQ1VSTGNvZGUKKyAgIHNheWluZyB3aGV0aGVyIGFuIGVycm9yIG9jY3VyZWQgb3IgQ1VSTEVfT0sgaWYgfGxlbnwgd2FzIHJlYWQuICovCitzdGF0aWMgQ1VSTGNvZGUKK3NvY2tldF9yZWFkKGN1cmxfc29ja2V0X3QgZmQsIHZvaWQgKnRvLCBzaXplX3QgbGVuKQogewotICB1bnNpZ25lZCBjaGFyICpwID0gYnVmOwotICBpbnQgYjsKLSAgd2hpbGUobGVuKSB7Ci0gICAgYiA9IHJlYWQoZmQsIHAsIGxlbik7Ci0gICAgaWYoYiA9PSAwKQotICAgICAgcmV0dXJuIDA7Ci0gICAgZWxzZSBpZihiIDwgMCAmJiAoZXJybm8gPT0gRUlOVFIgfHwgZXJybm8gPT0gRUFHQUlOKSkKLSAgICAgIC8qIFRPRE86IHRoaXMgd2lsbCBidXN5IGxvb3AgaW4gdGhlIEVBR0FJTiBjYXNlICovCi0gICAgICBjb250aW51ZTsKLSAgICBlbHNlIGlmKGIgPCAwKQotICAgICAgcmV0dXJuIC0xOwotICAgIGxlbiAtPSBiOwotICAgIHAgKz0gYjsKKyAgY2hhciAqdG9fcCA9IHRvOworICBDVVJMY29kZSBjb2RlOworICBzc2l6ZV90IG5yZWFkOworCisgIHdoaWxlKGxlbiA+IDApIHsKKyAgICBjb2RlID0gQ3VybF9yZWFkX3BsYWluKGZkLCB0b19wLCBsZW4sICZucmVhZCk7CisgICAgaWYoY29kZSA9PSBDVVJMRV9PSykgeworICAgICAgbGVuIC09IG5yZWFkOworICAgICAgdG9fcCArPSBucmVhZDsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAvKiBGSVhNRTogV2UgYXJlIGRvaW5nIGEgYnVzeSB3YWl0ICovCisgICAgICBpZihjb2RlID09IENVUkxFX0FHQUlOKQorICAgICAgICBjb250aW51ZTsKKyAgICAgIHJldHVybiBjb2RlOworICAgIH0KICAgfQotICByZXR1cm4gcCAtICh1bnNpZ25lZCBjaGFyKilidWY7CisgIHJldHVybiBDVVJMRV9PSzsKIH0KIAotc3RhdGljIGludAotYmxvY2tfd3JpdGUoaW50IGZkLCBjb25zdCB2b2lkICpidWYsIHNpemVfdCBsZW4pCisKKy8qIFdyaXRlIHxsZW58IGJ5dGVzIGZyb20gdGhlIGJ1ZmZlciB8dG98IHRvIHRoZSBzb2NrZXQgfGZkfC4gUmV0dXJuIGEKKyAgIENVUkxjb2RlIHNheWluZyB3aGV0aGVyIGFuIGVycm9yIG9jY3VyZWQgb3IgQ1VSTEVfT0sgaWYgfGxlbnwgd2FzCisgICB3cml0dGVuLiAqLworc3RhdGljIENVUkxjb2RlCitzb2NrZXRfd3JpdGUoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBjdXJsX3NvY2tldF90IGZkLCBjb25zdCB2b2lkICp0bywKKyAgICAgICAgICAgICBzaXplX3QgbGVuKQogewotICBjb25zdCB1bnNpZ25lZCBjaGFyICpwID0gYnVmOwotICBpbnQgYjsKLSAgd2hpbGUobGVuKSB7Ci0gICAgYiA9IHdyaXRlKGZkLCBwLCBsZW4pOwotICAgIGlmKGIgPCAwICYmIChlcnJubyA9PSBFSU5UUiB8fCBlcnJubyA9PSBFQUdBSU4pKQotICAgICAgY29udGludWU7Ci0gICAgZWxzZSBpZihiIDwgMCkKLSAgICAgIHJldHVybiAtMTsKLSAgICBsZW4gLT0gYjsKLSAgICBwICs9IGI7CisgIGNvbnN0IGNoYXIgKnRvX3AgPSB0bzsKKyAgQ1VSTGNvZGUgY29kZTsKKyAgc3NpemVfdCB3cml0dGVuOworCisgIHdoaWxlKGxlbiA+IDApIHsKKyAgICBjb2RlID0gQ3VybF93cml0ZV9wbGFpbihjb25uLCBmZCwgdG9fcCwgbGVuLCAmd3JpdHRlbik7CisgICAgaWYoY29kZSA9PSBDVVJMRV9PSykgeworICAgICAgbGVuIC09IHdyaXR0ZW47CisgICAgICB0b19wICs9IHdyaXR0ZW47CisgICAgfQorICAgIGVsc2UgeworICAgICAgLyogRklYTUU6IFdlIGFyZSBkb2luZyBhIGJ1c3kgd2FpdCAqLworICAgICAgaWYoY29kZSA9PSBDVVJMRV9BR0FJTikKKyAgICAgICAgY29udGludWU7CisgICAgICByZXR1cm4gY29kZTsKKyAgICB9CiAgIH0KLSAgcmV0dXJuIHAgLSAodW5zaWduZWQgY2hhciopYnVmOworICByZXR1cm4gQ1VSTEVfT0s7CiB9CiAKLXN0YXRpYyBpbnQKLXNlY19nZXRfZGF0YShzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCi0gICAgICAgICAgICAgaW50IGZkLCBzdHJ1Y3Qga3JiNGJ1ZmZlciAqYnVmKQorc3RhdGljIENVUkxjb2RlIHJlYWRfZGF0YShzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cmxfc29ja2V0X3QgZmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBrcmI0YnVmZmVyICpidWYpCiB7CiAgIGludCBsZW47Ci0gIGludCBiOworICB2b2lkKiB0bXA7CisgIENVUkxjb2RlIHJldDsKIAotICBiID0gYmxvY2tfcmVhZChmZCwgJmxlbiwgc2l6ZW9mKGxlbikpOwotICBpZihiID09IDApCi0gICAgcmV0dXJuIDA7Ci0gIGVsc2UgaWYoYiA8IDApCi0gICAgcmV0dXJuIC0xOworICByZXQgPSBzb2NrZXRfcmVhZChmZCwgJmxlbiwgc2l6ZW9mKGxlbikpOworICBpZiAocmV0ICE9IENVUkxFX09LKQorICAgIHJldHVybiByZXQ7CisKICAgbGVuID0gbnRvaGwobGVuKTsKLSAgLyogVE9ETzogVGhpcyByZWFsbG9jIHdpbGwgY2F1c2UgYSBtZW1vcnkgbGVhayBpbiBhbiBvdXQgb2YgbWVtb3J5Ci0gICAqIGNvbmRpdGlvbiAqLwotICBidWYtPmRhdGEgPSByZWFsbG9jKGJ1Zi0+ZGF0YSwgbGVuKTsKLSAgYiA9IGJ1Zi0+ZGF0YSA/IGJsb2NrX3JlYWQoZmQsIGJ1Zi0+ZGF0YSwgbGVuKSA6IC0xOwotICBpZihiID09IDApCi0gICAgcmV0dXJuIDA7Ci0gIGVsc2UgaWYoYiA8IDApCi0gICAgcmV0dXJuIC0xOwotICBidWYtPnNpemUgPSAoY29ubi0+bWVjaC0+ZGVjb2RlKShjb25uLT5hcHBfZGF0YSwgYnVmLT5kYXRhLCBsZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbm4tPmRhdGFfcHJvdCwgY29ubik7CisgIHRtcCA9IHJlYWxsb2MoYnVmLT5kYXRhLCBsZW4pOworICBpZiAodG1wID09IE5VTEwpCisgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CisKKyAgYnVmLT5kYXRhID0gdG1wOworICByZXQgPSBzb2NrZXRfcmVhZChmZCwgYnVmLT5kYXRhLCBsZW4pOworICBpZiAocmV0ICE9IENVUkxFX09LKQorICAgIHJldHVybiByZXQ7CisgIGJ1Zi0+c2l6ZSA9IGNvbm4tPm1lY2gtPmRlY29kZShjb25uLT5hcHBfZGF0YSwgYnVmLT5kYXRhLCBsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25uLT5kYXRhX3Byb3QsIGNvbm4pOwogICBidWYtPmluZGV4ID0gMDsKLSAgcmV0dXJuIDA7CisgIHJldHVybiBDVVJMRV9PSzsKIH0KIAogc3RhdGljIHNpemVfdApAQCAtMTg5LDEzMSArMjM2LDEwOSBAQAogICByZXR1cm4gbGVuOwogfQogCi1zdGF0aWMgc2l6ZV90Ci1idWZmZXJfd3JpdGUoc3RydWN0IGtyYjRidWZmZXIgKmJ1Ziwgdm9pZCAqZGF0YSwgc2l6ZV90IGxlbikKKy8qIE1hdGNoZXMgQ3VybF9yZWN2IHNpZ25hdHVyZSAqLworc3RhdGljIHNzaXplX3Qgc2VjX3JlY3Yoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBpbnQgc29ja2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqYnVmZmVyLCBzaXplX3QgbGVuLCBDVVJMY29kZSAqZXJyKQogewotICBpZihidWYtPmluZGV4ICsgbGVuID4gYnVmLT5zaXplKSB7Ci0gICAgdm9pZCAqdG1wOwotICAgIGlmKGJ1Zi0+ZGF0YSA9PSBOVUxMKQotICAgICAgdG1wID0gbWFsbG9jKDEwMjQpOwotICAgIGVsc2UKLSAgICAgIHRtcCA9IHJlYWxsb2MoYnVmLT5kYXRhLCBidWYtPmluZGV4ICsgbGVuKTsKLSAgICBpZih0bXAgPT0gTlVMTCkKLSAgICAgIHJldHVybiAtMTsKLSAgICBidWYtPmRhdGEgPSB0bXA7Ci0gICAgYnVmLT5zaXplID0gYnVmLT5pbmRleCArIGxlbjsKLSAgfQotICBtZW1jcHkoKGNoYXIqKWJ1Zi0+ZGF0YSArIGJ1Zi0+aW5kZXgsIGRhdGEsIGxlbik7Ci0gIGJ1Zi0+aW5kZXggKz0gbGVuOwotICByZXR1cm4gbGVuOwotfQorICBzaXplX3QgYnl0ZXNfcmVhZDsKKyAgc2l6ZV90IHRvdGFsX3JlYWQgPSAwOworICBjdXJsX3NvY2tldF90IGZkID0gY29ubi0+c29ja1tzb2NraW5kZXhdOwogCi1pbnQKLUN1cmxfc2VjX3JlYWQoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBpbnQgZmQsIHZvaWQgKmJ1ZmZlciwgaW50IGxlbmd0aCkKLXsKLSAgc2l6ZV90IGxlbjsKLSAgaW50IHJ4ID0gMDsKKyAgKmVyciA9IENVUkxFX09LOwogCi0gIGlmKGNvbm4tPnNlY19jb21wbGV0ZSA9PSAwIHx8IGNvbm4tPmRhdGFfcHJvdCA9PSAwKQotICAgIHJldHVybiByZWFkKGZkLCBidWZmZXIsIGxlbmd0aCk7CisgIC8qIEhhbmRsZSBjbGVhciB0ZXh0IHJlc3BvbnNlLiAqLworICBpZihjb25uLT5zZWNfY29tcGxldGUgPT0gMCB8fCBjb25uLT5kYXRhX3Byb3QgPT0gcHJvdF9jbGVhcikKKyAgICAgIHJldHVybiByZWFkKGZkLCBidWZmZXIsIGxlbik7CiAKLSAgaWYoY29ubi0+aW5fYnVmZmVyLmVvZl9mbGFnKXsKKyAgaWYoY29ubi0+aW5fYnVmZmVyLmVvZl9mbGFnKSB7CiAgICAgY29ubi0+aW5fYnVmZmVyLmVvZl9mbGFnID0gMDsKICAgICByZXR1cm4gMDsKICAgfQogCi0gIGxlbiA9IGJ1ZmZlcl9yZWFkKCZjb25uLT5pbl9idWZmZXIsIGJ1ZmZlciwgbGVuZ3RoKTsKLSAgbGVuZ3RoIC09IGxlbjsKLSAgcnggKz0gbGVuOwotICBidWZmZXIgPSAoY2hhciopYnVmZmVyICsgbGVuOworICBieXRlc19yZWFkID0gYnVmZmVyX3JlYWQoJmNvbm4tPmluX2J1ZmZlciwgYnVmZmVyLCBsZW4pOworICBsZW4gLT0gYnl0ZXNfcmVhZDsKKyAgdG90YWxfcmVhZCArPSBieXRlc19yZWFkOworICBidWZmZXIgKz0gYnl0ZXNfcmVhZDsKIAotICB3aGlsZShsZW5ndGgpIHsKLSAgICBpZihzZWNfZ2V0X2RhdGEoY29ubiwgZmQsICZjb25uLT5pbl9idWZmZXIpIDwgMCkKKyAgd2hpbGUobGVuID4gMCkgeworICAgIGlmKHJlYWRfZGF0YShjb25uLCBmZCwgJmNvbm4tPmluX2J1ZmZlcikgIT0gQ1VSTEVfT0spCiAgICAgICByZXR1cm4gLTE7CiAgICAgaWYoY29ubi0+aW5fYnVmZmVyLnNpemUgPT0gMCkgewotICAgICAgaWYocngpCisgICAgICBpZihieXRlc19yZWFkID4gMCkKICAgICAgICAgY29ubi0+aW5fYnVmZmVyLmVvZl9mbGFnID0gMTsKLSAgICAgIHJldHVybiByeDsKKyAgICAgIHJldHVybiBieXRlc19yZWFkOwogICAgIH0KLSAgICBsZW4gPSBidWZmZXJfcmVhZCgmY29ubi0+aW5fYnVmZmVyLCBidWZmZXIsIGxlbmd0aCk7Ci0gICAgbGVuZ3RoIC09IGxlbjsKLSAgICByeCArPSBsZW47Ci0gICAgYnVmZmVyID0gKGNoYXIqKWJ1ZmZlciArIGxlbjsKKyAgICBieXRlc19yZWFkID0gYnVmZmVyX3JlYWQoJmNvbm4tPmluX2J1ZmZlciwgYnVmZmVyLCBsZW4pOworICAgIGxlbiAtPSBieXRlc19yZWFkOworICAgIHRvdGFsX3JlYWQgKz0gYnl0ZXNfcmVhZDsKKyAgICBidWZmZXIgKz0gYnl0ZXNfcmVhZDsKICAgfQotICByZXR1cm4gcng7CisgIC8qIEZJWE1FOiBDaGVjayBmb3Igb3ZlcmZsb3cgKi8KKyAgcmV0dXJuIHRvdGFsX3JlYWQ7CiB9CiAKLXN0YXRpYyBpbnQKLXNlY19zZW5kKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgaW50IGZkLCBjb25zdCBjaGFyICpmcm9tLCBpbnQgbGVuZ3RoKQorLyogU2VuZCB8bGVuZ3RofCBieXRlcyBmcm9tIHxmcm9tfCB0byB0aGUgfGZkfCBzb2NrZXQgdGFraW5nIGNhcmUgb2YgZW5jb2RpbmcKKyAgIGFuZCBuZWdvY2lhdGluZyB3aXRoIHRoZSBzZXJ2ZXIuIHxmcm9tfCBjYW4gYmUgTlVMTC4gKi8KKy8qIEZJWE1FOiBXZSBkb24ndCBjaGVjayBmb3IgZXJyb3JzIG5vciByZXBvcnQgYW55ISAqLworc3RhdGljIHZvaWQgZG9fc2VjX3NlbmQoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBjdXJsX3NvY2tldF90IGZkLAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZnJvbSwgaW50IGxlbmd0aCkKIHsKLSAgaW50IGJ5dGVzOwotICB2b2lkICpidWY7Ci0gIGVudW0gcHJvdGVjdGlvbl9sZXZlbCBwcm90bGV2ZWwgPSBjb25uLT5kYXRhX3Byb3Q7Ci0gIGludCBpc2NtZCA9IHByb3RsZXZlbCA9PSBwcm90X2NtZDsKKyAgc2l6ZV90IGJ5dGVzOworICBzaXplX3QgaHRvbmxfYnl0ZXM7CisgIGNoYXIgKmJ1ZmZlcjsKKyAgY2hhciAqY21kX2J1ZmZlcjsKKyAgZW51bSBwcm90ZWN0aW9uX2xldmVsIHByb3RfbGV2ZWwgPSBjb25uLT5kYXRhX3Byb3Q7CisgIGJvb2wgaXNjbWQgPSBwcm90X2xldmVsID09IHByb3RfY21kOwogCiAgIGlmKGlzY21kKSB7CiAgICAgaWYoIXN0cm5jbXAoZnJvbSwgIlBBU1MgIiwgNSkgfHwgIXN0cm5jbXAoZnJvbSwgIkFDQ1QgIiwgNSkpCi0gICAgICBwcm90bGV2ZWwgPSBwcm90X3ByaXZhdGU7CisgICAgICBwcm90X2xldmVsID0gcHJvdF9wcml2YXRlOwogICAgIGVsc2UKLSAgICAgIHByb3RsZXZlbCA9IGNvbm4tPmNvbW1hbmRfcHJvdDsKKyAgICAgIHByb3RfbGV2ZWwgPSBjb25uLT5jb21tYW5kX3Byb3Q7CiAgIH0KLSAgYnl0ZXMgPSAoY29ubi0+bWVjaC0+ZW5jb2RlKShjb25uLT5hcHBfZGF0YSwgZnJvbSwgbGVuZ3RoLCBwcm90bGV2ZWwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmJ1ZiwgY29ubik7CisgIGJ5dGVzID0gY29ubi0+bWVjaC0+ZW5jb2RlKGNvbm4tPmFwcF9kYXRhLCBmcm9tLCBsZW5ndGgsIHByb3RfbGV2ZWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKiopJmJ1ZmZlciwgY29ubik7CiAgIGlmKGlzY21kKSB7Ci0gICAgY2hhciAqY21kYnVmOwotCi0gICAgYnl0ZXMgPSBDdXJsX2Jhc2U2NF9lbmNvZGUoY29ubi0+ZGF0YSwgKGNoYXIgKilidWYsIGJ5dGVzLCAmY21kYnVmKTsKKyAgICBieXRlcyA9IEN1cmxfYmFzZTY0X2VuY29kZShjb25uLT5kYXRhLCBidWZmZXIsIGJ5dGVzLCAmY21kX2J1ZmZlcik7CiAgICAgaWYoYnl0ZXMgPiAwKSB7Ci0gICAgICBpZihwcm90bGV2ZWwgPT0gcHJvdF9wcml2YXRlKQotICAgICAgICBibG9ja193cml0ZShmZCwgIkVOQyAiLCA0KTsKKyAgICAgIHN0YXRpYyBjb25zdCBjaGFyICplbmMgPSAiRU5DICI7CisgICAgICBzdGF0aWMgY29uc3QgY2hhciAqbWljID0gIk1JQyAiOworICAgICAgaWYocHJvdF9sZXZlbCA9PSBwcm90X3ByaXZhdGUpCisgICAgICAgIHNvY2tldF93cml0ZShjb25uLCBmZCwgZW5jLCA0KTsKICAgICAgIGVsc2UKLSAgICAgICAgYmxvY2tfd3JpdGUoZmQsICJNSUMgIiwgNCk7Ci0gICAgICBibG9ja193cml0ZShmZCwgY21kYnVmLCBieXRlcyk7Ci0gICAgICBibG9ja193cml0ZShmZCwgIlxyXG4iLCAyKTsKLSAgICAgIEN1cmxfaW5mb2YoY29ubi0+ZGF0YSwgIiVzICVzXG4iLAotICAgICAgICAgICAgICAgICBwcm90bGV2ZWwgPT0gcHJvdF9wcml2YXRlID8gIkVOQyIgOiAiTUlDIiwgY21kYnVmKTsKLSAgICAgIGZyZWUoY21kYnVmKTsKKyAgICAgICAgc29ja2V0X3dyaXRlKGNvbm4sIGZkLCBtaWMsIDQpOworCisgICAgICBzb2NrZXRfd3JpdGUoY29ubiwgZmQsIGNtZF9idWZmZXIsIGJ5dGVzKTsKKyAgICAgIHNvY2tldF93cml0ZShjb25uLCBmZCwgIlxyXG4iLCAyKTsKKyAgICAgIGluZm9mKGNvbm4tPmRhdGEsICJTZW5kOiAlcyVzXG4iLCBwcm90X2xldmVsID09IHByb3RfcHJpdmF0ZT9lbmM6bWljLAorICAgICAgICAgICAgY21kX2J1ZmZlcik7CisgICAgICBmcmVlKGNtZF9idWZmZXIpOwogICAgIH0KICAgfQogICBlbHNlIHsKLSAgICBieXRlcyA9IGh0b25sKGJ5dGVzKTsKLSAgICBibG9ja193cml0ZShmZCwgJmJ5dGVzLCBzaXplb2YoYnl0ZXMpKTsKLSAgICBibG9ja193cml0ZShmZCwgYnVmLCBudG9obChieXRlcykpOworICAgIGh0b25sX2J5dGVzID0gaHRvbmwoYnl0ZXMpOworICAgIHNvY2tldF93cml0ZShjb25uLCBmZCwgJmh0b25sX2J5dGVzLCBzaXplb2YoaHRvbmxfYnl0ZXMpKTsKKyAgICBzb2NrZXRfd3JpdGUoY29ubiwgZmQsIGJ1ZmZlciwgYnl0ZXMpOwogICB9Ci0gIGZyZWUoYnVmKTsKLSAgcmV0dXJuIGxlbmd0aDsKKyAgZnJlZShidWZmZXIpOwogfQogCi1pbnQKLUN1cmxfc2VjX2ZmbHVzaF9mZChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGludCBmZCkKK3N0YXRpYyBzc2l6ZV90IHNlY193cml0ZShzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGN1cmxfc29ja2V0X3QgZmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqYnVmZmVyLCBzaXplX3QgbGVuZ3RoKQogewotICBpZihjb25uLT5kYXRhX3Byb3QgIT0gcHJvdF9jbGVhcikgewotICAgIGlmKGNvbm4tPm91dF9idWZmZXIuaW5kZXggPiAwKXsKLSAgICAgIEN1cmxfc2VjX3dyaXRlKGNvbm4sIGZkLAotICAgICAgICAgICAgICAgICAgICAgY29ubi0+b3V0X2J1ZmZlci5kYXRhLCBjb25uLT5vdXRfYnVmZmVyLmluZGV4KTsKLSAgICAgIGNvbm4tPm91dF9idWZmZXIuaW5kZXggPSAwOwotICAgIH0KLSAgICBzZWNfc2VuZChjb25uLCBmZCwgTlVMTCwgMCk7Ci0gIH0KLSAgcmV0dXJuIDA7Ci19Ci0KLWludAotQ3VybF9zZWNfd3JpdGUoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBpbnQgZmQsIGNvbnN0IGNoYXIgKmJ1ZmZlciwgaW50IGxlbmd0aCkKLXsKLSAgaW50IGxlbiA9IGNvbm4tPmJ1ZmZlcl9zaXplOworICAvKiBGSVhNRTogQ2hlY2sgZm9yIG92ZXJmbG93ICovCisgIHNzaXplX3QgbGVuID0gY29ubi0+YnVmZmVyX3NpemU7CiAgIGludCB0eCA9IDA7CiAKLSAgaWYoY29ubi0+ZGF0YV9wcm90ID09IHByb3RfY2xlYXIpCi0gICAgcmV0dXJuIHdyaXRlKGZkLCBidWZmZXIsIGxlbmd0aCk7Ci0KLSAgbGVuIC09IChjb25uLT5tZWNoLT5vdmVyaGVhZCkoY29ubi0+YXBwX2RhdGEsIGNvbm4tPmRhdGFfcHJvdCwgbGVuKTsKKyAgbGVuIC09IGNvbm4tPm1lY2gtPm92ZXJoZWFkKGNvbm4tPmFwcF9kYXRhLCBjb25uLT5kYXRhX3Byb3QsIGxlbik7CiAgIGlmKGxlbiA8PSAwKQogICAgIGxlbiA9IGxlbmd0aDsKLSAgd2hpbGUobGVuZ3RoKXsKLSAgICBpZihsZW5ndGggPCBsZW4pCisgIHdoaWxlKGxlbmd0aCkgeworICAgIGlmKGxlbiA+PSAwIHx8IGxlbmd0aCA8IChzaXplX3QpbGVuKSB7CisgICAgICAvKiBGSVhNRTogQ2hlY2sgZm9yIG92ZXJmbG93LiAqLwogICAgICAgbGVuID0gbGVuZ3RoOwotICAgIHNlY19zZW5kKGNvbm4sIGZkLCBidWZmZXIsIGxlbik7CisgICAgfQorICAgIGRvX3NlY19zZW5kKGNvbm4sIGZkLCBidWZmZXIsIGxlbik7CiAgICAgbGVuZ3RoIC09IGxlbjsKICAgICBidWZmZXIgKz0gbGVuOwogICAgIHR4ICs9IGxlbjsKQEAgLTMyMSw2MyArMzQ2LDU3IEBACiAgIHJldHVybiB0eDsKIH0KIAotc3NpemVfdAotQ3VybF9zZWNfc2VuZChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGludCBudW0sIGNvbnN0IGNoYXIgKmJ1ZmZlciwgaW50IGxlbmd0aCkKKy8qIE1hdGNoZXMgQ3VybF9zZW5kIHNpZ25hdHVyZSAqLworc3RhdGljIHNzaXplX3Qgc2VjX3NlbmQoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBpbnQgc29ja2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqYnVmZmVyLCBzaXplX3QgbGVuLCBDVVJMY29kZSAqZXJyKQogewotICBjdXJsX3NvY2tldF90IGZkID0gY29ubi0+c29ja1tudW1dOwotICByZXR1cm4gKHNzaXplX3QpQ3VybF9zZWNfd3JpdGUoY29ubiwgZmQsIGJ1ZmZlciwgbGVuZ3RoKTsKKyAgY3VybF9zb2NrZXRfdCBmZCA9IGNvbm4tPnNvY2tbc29ja2luZGV4XTsKKyAgKmVyciA9IENVUkxFX09LOworICByZXR1cm4gc2VjX3dyaXRlKGNvbm4sIGZkLCBidWZmZXIsIGxlbik7CiB9CiAKLWludAotQ3VybF9zZWNfcHV0YyhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGludCBjLCBGSUxFICpGKQorLyogRklYTUU6IHxsZXZlbHwgc2hvdWxkIG5vdCBiZSBhbiBpbnQgYnV0IGEgc3RydWN0IHByb3RlY3Rpb25fbGV2ZWwgKi8KK2ludCBDdXJsX3NlY19yZWFkX21zZyhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGNoYXIgKmJ1ZmZlciwgaW50IGxldmVsKQogewotICBjaGFyIGNoID0gKGNoYXIpYzsKLSAgaWYoY29ubi0+ZGF0YV9wcm90ID09IHByb3RfY2xlYXIpCi0gICAgcmV0dXJuIHB1dGMoYywgRik7CisgIC8qIGRlY29kZWRfbGVuIHNob3VsZCBiZSBzaXplX3Qgb3Igc3NpemVfdCBidXQgY29ubi0+bWVjaC0+ZGVjb2RlIHJldHVybnMgYW4KKyAgICAgaW50ICovCisgIGludCBkZWNvZGVkX2xlbjsKKyAgY2hhciAqYnVmOworICBpbnQgcmV0X2NvZGU7CiAKLSAgYnVmZmVyX3dyaXRlKCZjb25uLT5vdXRfYnVmZmVyLCAmY2gsIDEpOwotICBpZihjID09ICdcbicgfHwgY29ubi0+b3V0X2J1ZmZlci5pbmRleCA+PSAxMDI0IC8qIFhYWCAqLykgewotICAgIEN1cmxfc2VjX3dyaXRlKGNvbm4sIGZpbGVubyhGKSwgY29ubi0+b3V0X2J1ZmZlci5kYXRhLAotICAgICAgICAgICAgICAgICAgIGNvbm4tPm91dF9idWZmZXIuaW5kZXgpOwotICAgIGNvbm4tPm91dF9idWZmZXIuaW5kZXggPSAwOwotICB9Ci0gIHJldHVybiBjOwotfQotCi1pbnQKLUN1cmxfc2VjX3JlYWRfbXNnKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgY2hhciAqcywgaW50IGxldmVsKQotewotICBpbnQgbGVuOwotICB1bnNpZ25lZCBjaGFyICpidWY7Ci0gIGludCBjb2RlOwotCi0gIGxlbiA9IEN1cmxfYmFzZTY0X2RlY29kZShzICsgNCwgJmJ1Zik7IC8qIFhYWCAqLwotICBpZihsZW4gPiAwKQotICAgIGxlbiA9IChjb25uLT5tZWNoLT5kZWNvZGUpKGNvbm4tPmFwcF9kYXRhLCBidWYsIGxlbiwgbGV2ZWwsIGNvbm4pOwotICBlbHNlCisgIGRlY29kZWRfbGVuID0gQ3VybF9iYXNlNjRfZGVjb2RlKGJ1ZmZlciArIDQsICh1bnNpZ25lZCBjaGFyICoqKSZidWYpOworICBpZihkZWNvZGVkX2xlbiA8PSAwKSB7CisgICAgZnJlZShidWYpOwogICAgIHJldHVybiAtMTsKKyAgfQogCi0gIGlmKGxlbiA8IDApIHsKKyAgZGVjb2RlZF9sZW4gPSBjb25uLT5tZWNoLT5kZWNvZGUoY29ubi0+YXBwX2RhdGEsIGJ1ZiwgZGVjb2RlZF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVsLCBjb25uKTsKKyAgaWYoZGVjb2RlZF9sZW4gPD0gMCkgewogICAgIGZyZWUoYnVmKTsKICAgICByZXR1cm4gLTE7CiAgIH0KIAogICBpZihjb25uLT5kYXRhLT5zZXQudmVyYm9zZSkgewotICAgIGJ1ZltsZW5dID0gJ1xuJzsKLSAgICBDdXJsX2RlYnVnKGNvbm4tPmRhdGEsIENVUkxJTkZPX0hFQURFUl9JTiwgKGNoYXIgKilidWYsIGxlbiArIDEsIGNvbm4pOworICAgIGJ1ZltkZWNvZGVkX2xlbl0gPSAnXG4nOworICAgIEN1cmxfZGVidWcoY29ubi0+ZGF0YSwgQ1VSTElORk9fSEVBREVSX0lOLCBidWYsIGRlY29kZWRfbGVuICsgMSwgY29ubik7CiAgIH0KIAotICBidWZbbGVuXSA9ICdcMCc7Ci0KKyAgYnVmW2RlY29kZWRfbGVuXSA9ICdcMCc7CisgIERFQlVHQVNTRVJUKGRlY29kZWRfbGVuID4gMyk7CiAgIGlmKGJ1ZlszXSA9PSAnLScpCi0gICAgY29kZSA9IDA7Ci0gIGVsc2UKLSAgICBzc2NhbmYoKGNoYXIgKilidWYsICIlZCIsICZjb2RlKTsKLSAgaWYoYnVmW2xlbi0xXSA9PSAnXG4nKQotICAgIGJ1ZltsZW4tMV0gPSAnXDAnOwotICBzdHJjcHkocywgKGNoYXIgKilidWYpOworICAgIHJldF9jb2RlID0gMDsKKyAgZWxzZSB7CisgICAgLyogQ2hlY2sgZm9yIGVycm9yPyAqLworICAgIHNzY2FuZihidWYsICIlZCIsICZyZXRfY29kZSk7CisgIH0KKworICBpZihidWZbZGVjb2RlZF9sZW4gLSAxXSA9PSAnXG4nKQorICAgIGJ1ZltkZWNvZGVkX2xlbiAtIDFdID0gJ1wwJzsKKyAgLyogRklYTUU6IElzIHxidWZmZXJ8IGxlbmd0aCBhbHdheXMgZ3JlYXRlciB0aGFuIHxkZWNvZGVkX2xlbnw/ICovCisgIHN0cmNweShidWZmZXIsIGJ1Zik7CiAgIGZyZWUoYnVmKTsKLSAgcmV0dXJuIGNvZGU7CisgIHJldHVybiByZXRfY29kZTsKIH0KIAogZW51bSBwcm90ZWN0aW9uX2xldmVsCkBAIC0zODgsNjQgKzQwNyw2MiBAQAogICByZXR1cm4gb2xkOwogfQogCi1zdGF0aWMgaW50Ci1zZWNfcHJvdF9pbnRlcm5hbChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGludCBsZXZlbCkKKy8qIEZJWE1FOiBUaGUgZXJyb3IgY29kZSByZXR1cm5lZCBoZXJlIGlzIG5ldmVyIGNoZWNrZWQuICovCitpbnQgQ3VybF9zZWNfc2V0X3Byb3RlY3Rpb25fbGV2ZWwoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uKQogewotICBjaGFyICpwOwotICB1bnNpZ25lZCBpbnQgcyA9IDEwNDg1NzY7Ci0gIHNzaXplX3QgbnJlYWQ7CisgIGludCBjb2RlOworICBjaGFyKiBwYnN6OworICBzdGF0aWMgdW5zaWduZWQgaW50IGJ1ZmZlcl9zaXplID0gMSA8PCAyMDsgLyogMTA0ODU3NiAqLworICBlbnVtIHByb3RlY3Rpb25fbGV2ZWwgbGV2ZWwgPSBjb25uLT5yZXF1ZXN0X2RhdGFfcHJvdDsKIAotICBpZighY29ubi0+c2VjX2NvbXBsZXRlKXsKLSAgICBpbmZvZihjb25uLT5kYXRhLCAiTm8gc2VjdXJpdHkgZGF0YSBleGNoYW5nZSBoYXMgdGFrZW4gcGxhY2UuXG4iKTsKKyAgaWYoIWNvbm4tPnNlY19jb21wbGV0ZSkgeworICAgIGluZm9mKGNvbm4tPmRhdGEsICJUcnlpbmcgdG8gY2hhbmdlIHRoZSBwcm90ZWN0aW9uIGxldmVsIGFmdGVyIHRoZSIKKyAgICAgICAgICAgICAgICAgICAgICAiY29tcGxldGlvbiBvZiB0aGUgZGF0YSBleGNoYW5nZS5cbiIpOwogICAgIHJldHVybiAtMTsKICAgfQogCi0gIGlmKGxldmVsKXsKLSAgICBpbnQgY29kZTsKLSAgICBpZihDdXJsX2Z0cHNlbmRmKGNvbm4sICJQQlNaICV1IiwgcykpCisgIC8qIEJhaWwgb3V0IGlmIHdlIHRyeSB0byBzZXQgdXAgdGhlIHNhbWUgbGV2ZWwgKi8KKyAgaWYoY29ubi0+ZGF0YV9wcm90ID09IGxldmVsKQorICAgIHJldHVybiAwOworCisgIGlmKGxldmVsKSB7CisgICAgY29kZSA9IGZ0cF9zZW5kX2NvbW1hbmQoY29ubiwgIlBCU1ogJXUiLCBidWZmZXJfc2l6ZSk7CisgICAgaWYoY29kZSA8IDApCiAgICAgICByZXR1cm4gLTE7CiAKLSAgICBpZihDdXJsX0dldEZUUFJlc3BvbnNlKCZucmVhZCwgY29ubiwgJmNvZGUpKQotICAgICAgcmV0dXJuIC0xOwotCi0gICAgaWYoY29kZS8xMDAgIT0gMil7Ci0gICAgICBmYWlsZihjb25uLT5kYXRhLCAiRmFpbGVkIHRvIHNldCBwcm90ZWN0aW9uIGJ1ZmZlciBzaXplLiIpOworICAgIGlmKGNvZGUvMTAwICE9IDIpIHsKKyAgICAgIGZhaWxmKGNvbm4tPmRhdGEsICJGYWlsZWQgdG8gc2V0IHRoZSBwcm90ZWN0aW9uJ3MgYnVmZmVyIHNpemUuIik7CiAgICAgICByZXR1cm4gLTE7CiAgICAgfQotICAgIGNvbm4tPmJ1ZmZlcl9zaXplID0gczsKKyAgICBjb25uLT5idWZmZXJfc2l6ZSA9IGJ1ZmZlcl9zaXplOwogCi0gICAgcCA9IHN0cnN0cihjb25uLT5kYXRhLT5zdGF0ZS5idWZmZXIsICJQQlNaPSIpOwotICAgIGlmKHApCi0gICAgICBzc2NhbmYocCwgIlBCU1o9JXUiLCAmcyk7Ci0gICAgaWYocyA8IGNvbm4tPmJ1ZmZlcl9zaXplKQotICAgICAgY29ubi0+YnVmZmVyX3NpemUgPSBzOworICAgIHBic3ogPSBzdHJzdHIoY29ubi0+ZGF0YS0+c3RhdGUuYnVmZmVyLCAiUEJTWj0iKTsKKyAgICBpZihwYnN6KSB7CisgICAgICAvKiBGSVhNRTogQ2hlY2tzIGZvciBlcnJvcnMgaW4gc3NjYW5mPyAqLworICAgICAgc3NjYW5mKHBic3osICJQQlNaPSV1IiwgJmJ1ZmZlcl9zaXplKTsKKyAgICAgIGlmKGJ1ZmZlcl9zaXplIDwgY29ubi0+YnVmZmVyX3NpemUpCisgICAgICAgIGNvbm4tPmJ1ZmZlcl9zaXplID0gYnVmZmVyX3NpemU7CisgICAgfQogICB9CiAKLSAgaWYoQ3VybF9mdHBzZW5kZihjb25uLCAiUFJPVCAlYyIsIGxldmVsWyJDU0VQIl0pKQorICAvKiBOb3cgdHJ5IHRvIG5lZ2lvY2lhdGUgdGhlIHByb3RlY3Rpb24gbGV2ZWwuICovCisgIGNvZGUgPSBmdHBfc2VuZF9jb21tYW5kKGNvbm4sICJQUk9UICVjIiwgbGV2ZWxfdG9fY2hhcihsZXZlbCkpOworCisgIGlmKGNvZGUgPCAwKQogICAgIHJldHVybiAtMTsKIAotICBpZihDdXJsX0dldEZUUFJlc3BvbnNlKCZucmVhZCwgY29ubiwgTlVMTCkpCi0gICAgcmV0dXJuIC0xOwotCi0gIGlmKGNvbm4tPmRhdGEtPnN0YXRlLmJ1ZmZlclswXSAhPSAnMicpewotICAgIGZhaWxmKGNvbm4tPmRhdGEsICJGYWlsZWQgdG8gc2V0IHByb3RlY3Rpb24gbGV2ZWwuIik7CisgIGlmKGNvZGUvMTAwICE9IDIpIHsKKyAgICBmYWlsZihjb25uLT5kYXRhLCAiRmFpbGVkIHRvIHNldCB0aGUgcHJvdGVjdGlvbiBsZXZlbC4iKTsKICAgICByZXR1cm4gLTE7CiAgIH0KIAotICBjb25uLT5kYXRhX3Byb3QgPSAoZW51bSBwcm90ZWN0aW9uX2xldmVsKWxldmVsOworICBjb25uLT5kYXRhX3Byb3QgPSBsZXZlbDsKICAgaWYobGV2ZWwgPT0gcHJvdF9wcml2YXRlKQotICAgIGNvbm4tPmNvbW1hbmRfcHJvdCA9IChlbnVtIHByb3RlY3Rpb25fbGV2ZWwpbGV2ZWw7CisgICAgY29ubi0+Y29tbWFuZF9wcm90ID0gbGV2ZWw7CisKICAgcmV0dXJuIDA7CiB9CiAKLXZvaWQKLUN1cmxfc2VjX3NldF9wcm90ZWN0aW9uX2xldmVsKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubikKLXsKLSAgaWYoY29ubi0+c2VjX2NvbXBsZXRlICYmIGNvbm4tPmRhdGFfcHJvdCAhPSBjb25uLT5yZXF1ZXN0X2RhdGFfcHJvdCkKLSAgICBzZWNfcHJvdF9pbnRlcm5hbChjb25uLCBjb25uLT5yZXF1ZXN0X2RhdGFfcHJvdCk7Ci19Ci0KLQogaW50CiBDdXJsX3NlY19yZXF1ZXN0X3Byb3Qoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBjb25zdCBjaGFyICpsZXZlbCkKIHsKQEAgLTQ1Niw2NyArNDczLDgxIEBACiAgIHJldHVybiAwOwogfQogCi1pbnQKLUN1cmxfc2VjX2xvZ2luKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubikKK3N0YXRpYyBDVVJMY29kZSBjaG9vc2VfbWVjaChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pCiB7CiAgIGludCByZXQ7Ci0gIGNvbnN0IHN0cnVjdCBDdXJsX3NlY19jbGllbnRfbWVjaCAqIGNvbnN0ICptOwotICBzc2l6ZV90IG5yZWFkOwotICBzdHJ1Y3QgU2Vzc2lvbkhhbmRsZSAqZGF0YT1jb25uLT5kYXRhOwotICBpbnQgZnRwY29kZTsKKyAgc3RydWN0IFNlc3Npb25IYW5kbGUgKmRhdGEgPSBjb25uLT5kYXRhOworICBjb25zdCBzdHJ1Y3QgQ3VybF9zZWNfY2xpZW50X21lY2ggKiBjb25zdCAqbWVjaDsKKyAgdm9pZCAqdG1wX2FsbG9jYXRpb247CisgIGNvbnN0IGNoYXIgKm1lY2hfbmFtZTsKIAotICBmb3IobSA9IG1lY2hzOyAqbSAmJiAoKm0pLT5uYW1lOyBtKyspIHsKLSAgICB2b2lkICp0bXA7Ci0KLSAgICB0bXAgPSByZWFsbG9jKGNvbm4tPmFwcF9kYXRhLCAoKm0pLT5zaXplKTsKLSAgICBpZih0bXAgPT0gTlVMTCkgewotICAgICAgZmFpbGYgKGRhdGEsICJyZWFsbG9jICV1IGZhaWxlZCIsICgqbSktPnNpemUpOwotICAgICAgcmV0dXJuIC0xOwotICAgIH0KLSAgICBjb25uLT5hcHBfZGF0YSA9IHRtcDsKLQotICAgIGlmKCgqbSktPmluaXQgJiYgKCooKm0pLT5pbml0KShjb25uLT5hcHBfZGF0YSkgIT0gMCkgewotICAgICAgaW5mb2YoZGF0YSwgIlNraXBwaW5nICVzLi4uXG4iLCAoKm0pLT5uYW1lKTsKKyAgZm9yKG1lY2ggPSBtZWNoczsgKCptZWNoKTsgKyttZWNoKSB7CisgICAgbWVjaF9uYW1lID0gKCptZWNoKS0+bmFtZTsKKyAgICAvKiBXZSBoYXZlIG5vIG1lY2hhbmlzbSB3aXRoIGEgTlVMTCBuYW1lIGJ1dCBrZWVwIHRoaXMgY2hlY2sgKi8KKyAgICBERUJVR0FTU0VSVChtZWNoX25hbWUgIT0gTlVMTCk7CisgICAgaWYobWVjaF9uYW1lID09IE5VTEwpIHsKKyAgICAgIGluZm9mKGRhdGEsICJTa2lwcGluZyBtZWNoYW5pc20gd2l0aCBlbXB0eSBuYW1lICglcClcbiIsIG1lY2gpOwogICAgICAgY29udGludWU7CiAgICAgfQotICAgIGluZm9mKGRhdGEsICJUcnlpbmcgJXMuLi5cbiIsICgqbSktPm5hbWUpOworICAgIHRtcF9hbGxvY2F0aW9uID0gcmVhbGxvYyhjb25uLT5hcHBfZGF0YSwgKCptZWNoKS0+c2l6ZSk7CisgICAgaWYodG1wX2FsbG9jYXRpb24gPT0gTlVMTCkgeworICAgICAgZmFpbGYoZGF0YSwgIkZhaWxlZCByZWFsbG9jIG9mIHNpemUgJXUiLCAoKm1lY2gpLT5zaXplKTsKKyAgICAgIG1lY2ggPSBOVUxMOworICAgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CisgICAgfQorICAgIGNvbm4tPmFwcF9kYXRhID0gdG1wX2FsbG9jYXRpb247CiAKLSAgICBpZihDdXJsX2Z0cHNlbmRmKGNvbm4sICJBVVRIICVzIiwgKCptKS0+bmFtZSkpCi0gICAgICByZXR1cm4gLTE7CisgICAgaWYoKCptZWNoKS0+aW5pdCkgeworICAgICAgcmV0ID0gKCptZWNoKS0+aW5pdChjb25uKTsKKyAgICAgIGlmKHJldCAhPSAwKSB7CisgICAgICAgIGluZm9mKGRhdGEsICJGYWlsZWQgaW5pdGlhbGl6YXRpb24gZm9yICVzLiBTa2lwcGluZyBpdC5cbiIsIG1lY2hfbmFtZSk7CisgICAgICAgIGNvbnRpbnVlOworICAgICAgfQorICAgIH0KIAotICAgIGlmKEN1cmxfR2V0RlRQUmVzcG9uc2UoJm5yZWFkLCBjb25uLCAmZnRwY29kZSkpCi0gICAgICByZXR1cm4gLTE7CisgICAgaW5mb2YoZGF0YSwgIlRyeWluZyBtZWNoYW5pc20gJXMuLi5cbiIsIG1lY2hfbmFtZSk7CisgICAgcmV0ID0gZnRwX3NlbmRfY29tbWFuZChjb25uLCAiQVVUSCAlcyIsIG1lY2hfbmFtZSk7CisgICAgaWYocmV0IDwgMCkKKyAgICAgIC8qIEZJWE1FOiBUaGlzIGVycm9yIGlzIHRvbyBnZW5lcmljIGJ1dCBpdCBpcyBPSyBmb3Igbm93LiAqLworICAgICAgcmV0dXJuIENVUkxFX0NPVUxETlRfQ09OTkVDVDsKIAotICAgIGlmKGNvbm4tPmRhdGEtPnN0YXRlLmJ1ZmZlclswXSAhPSAnMycpewotICAgICAgc3dpdGNoKGZ0cGNvZGUpIHsKKyAgICBpZihyZXQvMTAwICE9IDMpIHsKKyAgICAgIHN3aXRjaChyZXQpIHsKICAgICAgIGNhc2UgNTA0OgotICAgICAgICBpbmZvZihkYXRhLAotICAgICAgICAgICAgICAiJXMgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgc2VydmVyLlxuIiwgKCptKS0+bmFtZSk7CisgICAgICAgIGluZm9mKGRhdGEsICJNZWNoYW5pc20gJXMgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgc2VydmVyIChzZXJ2ZXIgIgorICAgICAgICAgICAgICAgICAgICAicmV0dXJuZWQgZnRwIGNvZGU6IDUwNCkuXG4iLCBtZWNoX25hbWUpOwogICAgICAgICBicmVhazsKICAgICAgIGNhc2UgNTM0OgotICAgICAgICBpbmZvZihkYXRhLCAiJXMgcmVqZWN0ZWQgYXMgc2VjdXJpdHkgbWVjaGFuaXNtLlxuIiwgKCptKS0+bmFtZSk7CisgICAgICAgIGluZm9mKGRhdGEsICJNZWNoYW5pc20gJXMgd2FzIHJlamVjdGVkIGJ5IHRoZSBzZXJ2ZXIgKHNlcnZlciByZXR1cm5lZCAiCisgICAgICAgICAgICAgICAgICAgICJmdHAgY29kZTogNTM0KS5cbiIsIG1lY2hfbmFtZSk7CiAgICAgICAgIGJyZWFrOwogICAgICAgZGVmYXVsdDoKLSAgICAgICAgaWYoY29ubi0+ZGF0YS0+c3RhdGUuYnVmZmVyWzBdID09ICc1JykgewotICAgICAgICAgIGluZm9mKGRhdGEsICJUaGUgc2VydmVyIGRvZXNuJ3Qgc3VwcG9ydCB0aGUgRlRQICIKLSAgICAgICAgICAgICAgICAic2VjdXJpdHkgZXh0ZW5zaW9ucy5cbiIpOwotICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgaWYocmV0LzEwMCA9PSA1KSB7CisgICAgICAgICAgaW5mb2YoZGF0YSwgIlRoZSBzZXJ2ZXIgZG9lcyBub3Qgc3VwcG9ydCB0aGUgc2VjdXJpdHkgZXh0ZW5zaW9ucy5cbiIpOworICAgICAgICAgIHJldHVybiBDVVJMRV9VU0VfU1NMX0ZBSUxFRDsKICAgICAgICAgfQogICAgICAgICBicmVhazsKICAgICAgIH0KICAgICAgIGNvbnRpbnVlOwogICAgIH0KIAotICAgIHJldCA9ICgqKCptKS0+YXV0aCkoY29ubi0+YXBwX2RhdGEsIGNvbm4pOworICAgIC8qIEF1dGhlbnRpY2F0ZSAqLworICAgIHJldCA9ICgqbWVjaCktPmF1dGgoY29ubi0+YXBwX2RhdGEsIGNvbm4pOwogCiAgICAgaWYocmV0ID09IEFVVEhfQ09OVElOVUUpCiAgICAgICBjb250aW51ZTsKLSAgICBlbHNlIGlmKHJldCAhPSBBVVRIX09LKXsKLSAgICAgIC8qIG1lY2hhbmlzbSBpcyBzdXBwb3NlZCB0byBvdXRwdXQgZXJyb3Igc3RyaW5nICovCisgICAgZWxzZSBpZihyZXQgIT0gQVVUSF9PSykgeworICAgICAgLyogTWVjaGFuaXNtIGhhcyBkdW1wZWQgdGhlIGVycm9yIHRvIHN0ZGVyciwgZG9uJ3QgZXJyb3IgaGVyZS4gKi8KICAgICAgIHJldHVybiAtMTsKICAgICB9Ci0gICAgY29ubi0+bWVjaCA9ICptOworICAgIERFQlVHQVNTRVJUKHJldCA9PSBBVVRIX09LKTsKKworICAgIGNvbm4tPm1lY2ggPSAqbWVjaDsKICAgICBjb25uLT5zZWNfY29tcGxldGUgPSAxOworICAgIGNvbm4tPnJlY3ZbRklSU1RTT0NLRVRdID0gc2VjX3JlY3Y7CisgICAgY29ubi0+c2VuZFtGSVJTVFNPQ0tFVF0gPSBzZWNfc2VuZDsKKyAgICBjb25uLT5yZWN2W1NFQ09OREFSWVNPQ0tFVF0gPSBzZWNfcmVjdjsKKyAgICBjb25uLT5zZW5kW1NFQ09OREFSWVNPQ0tFVF0gPSBzZWNfc2VuZDsKICAgICBjb25uLT5jb21tYW5kX3Byb3QgPSBwcm90X3NhZmU7CiAgICAgLyogU2V0IHRoZSByZXF1ZXN0ZWQgcHJvdGVjdGlvbiBsZXZlbCAqLwogICAgIC8qIEJMT0NLSU5HICovCkBAIC01MjQsMjMgKzU1NSwzOCBAQAogICAgIGJyZWFrOwogICB9CiAKLSAgcmV0dXJuICptID09IE5VTEw7CisgIHJldHVybiBtZWNoICE9IE5VTEwgPyBDVVJMRV9PSyA6IENVUkxFX0ZBSUxFRF9JTklUOwogfQogCitDVVJMY29kZQorQ3VybF9zZWNfbG9naW4oc3RydWN0IGNvbm5lY3RkYXRhICpjb25uKQoreworICByZXR1cm4gY2hvb3NlX21lY2goY29ubik7Cit9CisKKwogdm9pZAogQ3VybF9zZWNfZW5kKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubikKIHsKLSAgaWYoY29ubi0+bWVjaCAhPSBOVUxMKSB7Ci0gICAgaWYoY29ubi0+bWVjaC0+ZW5kKQotICAgICAgKGNvbm4tPm1lY2gtPmVuZCkoY29ubi0+YXBwX2RhdGEpOwotICAgIG1lbXNldChjb25uLT5hcHBfZGF0YSwgMCwgY29ubi0+bWVjaC0+c2l6ZSk7CisgIGlmKGNvbm4tPm1lY2ggIT0gTlVMTCAmJiBjb25uLT5tZWNoLT5lbmQpCisgICAgY29ubi0+bWVjaC0+ZW5kKGNvbm4tPmFwcF9kYXRhKTsKKyAgaWYoY29ubi0+YXBwX2RhdGEpIHsKICAgICBmcmVlKGNvbm4tPmFwcF9kYXRhKTsKICAgICBjb25uLT5hcHBfZGF0YSA9IE5VTEw7CiAgIH0KKyAgaWYoY29ubi0+aW5fYnVmZmVyLmRhdGEpIHsKKyAgICBmcmVlKGNvbm4tPmluX2J1ZmZlci5kYXRhKTsKKyAgICBjb25uLT5pbl9idWZmZXIuZGF0YSA9IE5VTEw7CisgICAgY29ubi0+aW5fYnVmZmVyLnNpemUgPSAwOworICAgIGNvbm4tPmluX2J1ZmZlci5pbmRleCA9IDA7CisgICAgLyogRklYTUU6IElzIHRoaXMgcmVhbGx5IG5lZWRlZD8gKi8KKyAgICBjb25uLT5pbl9idWZmZXIuZW9mX2ZsYWcgPSAwOworICB9CiAgIGNvbm4tPnNlY19jb21wbGV0ZSA9IDA7CiAgIGNvbm4tPmRhdGFfcHJvdCA9IChlbnVtIHByb3RlY3Rpb25fbGV2ZWwpMDsKLSAgY29ubi0+bWVjaD1OVUxMOworICBjb25uLT5tZWNoID0gTlVMTDsKIH0KIAotI2VuZGlmIC8qIEhBVkVfS1JCNCAqLworI2VuZGlmIC8qIEhBVkVfS1JCNCB8fCBIQVZFX0dTU0FQSSAqLworCiAjZW5kaWYgLyogQ1VSTF9ESVNBQkxFX0ZUUCAqLwpkaWZmIC0tZ2l0IGEvbGliL3NlbmRmLmMgYi9saWIvc2VuZGYuYwppbmRleCBmZjRhZWUzLi5iNzNjMjI0IDEwMDY0NAotLS0gYS9saWIvc2VuZGYuYworKysgYi9saWIvc2VuZGYuYwpAQCAtMjM0LDE0ICsyMzQsNTMgQEAKICAgcmV0dXJuIHJlczsKIH0KIAotc3RhdGljIHNzaXplX3Qgc2VuZF9wbGFpbihzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGludCBudW0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKm1lbSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGxlbikKKy8qCisgKiBDdXJsX3dyaXRlKCkgaXMgYW4gaW50ZXJuYWwgd3JpdGUgZnVuY3Rpb24gdGhhdCBzZW5kcyBkYXRhIHRvIHRoZQorICogc2VydmVyLiBXb3JrcyB3aXRoIHBsYWluIHNvY2tldHMsIFNDUCwgU1NMIG9yIGtlcmJlcm9zLgorICoKKyAqIElmIHRoZSB3cml0ZSB3b3VsZCBibG9jayAoQ1VSTEVfQUdBSU4pLCB3ZSByZXR1cm4gQ1VSTEVfT0sgYW5kCisgKiAoKndyaXR0ZW4gPT0gMCkuIE90aGVyd2lzZSB3ZSByZXR1cm4gcmVndWxhciBDVVJMY29kZSB2YWx1ZS4KKyAqLworQ1VSTGNvZGUgQ3VybF93cml0ZShzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgIGN1cmxfc29ja2V0X3Qgc29ja2ZkLAorICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICptZW0sCisgICAgICAgICAgICAgICAgICAgIHNpemVfdCBsZW4sCisgICAgICAgICAgICAgICAgICAgIHNzaXplX3QgKndyaXR0ZW4pCit7CisgIHNzaXplX3QgYnl0ZXNfd3JpdHRlbjsKKyAgQ1VSTGNvZGUgY3VybGNvZGUgPSBDVVJMRV9PSzsKKyAgaW50IG51bSA9IChzb2NrZmQgPT0gY29ubi0+c29ja1tTRUNPTkRBUllTT0NLRVRdKTsKKworICBieXRlc193cml0dGVuID0gY29ubi0+c2VuZFtudW1dKGNvbm4sIG51bSwgbWVtLCBsZW4sICZjdXJsY29kZSk7CisKKyAgKndyaXR0ZW4gPSBieXRlc193cml0dGVuOworICBpZihieXRlc193cml0dGVuID49IDApCisgICAgLyogd2UgY29tcGxldGVseSBpZ25vcmUgdGhlIGN1cmxjb2RlIHZhbHVlIHdoZW4gc3ViemVybyBpcyBub3QgcmV0dXJuZWQgKi8KKyAgICByZXR1cm4gQ1VSTEVfT0s7CisKKyAgLyogaGFuZGxlIENVUkxFX0FHQUlOIG9yIGEgc2VuZCBmYWlsdXJlICovCisgIHN3aXRjaChjdXJsY29kZSkgeworICBjYXNlIENVUkxFX0FHQUlOOgorICAgICp3cml0dGVuID0gMDsKKyAgICByZXR1cm4gQ1VSTEVfT0s7CisKKyAgY2FzZSBDVVJMRV9PSzoKKyAgICAvKiBnZW5lcmFsIHNlbmQgZmFpbHVyZSAqLworICAgIHJldHVybiBDVVJMRV9TRU5EX0VSUk9SOworCisgIGRlZmF1bHQ6CisgICAgLyogd2UgZ290IGEgc3BlY2lmaWMgY3VybGNvZGUsIGZvcndhcmQgaXQgKi8KKyAgICByZXR1cm4gKENVUkxjb2RlKWN1cmxjb2RlOworICB9Cit9CisKK3NzaXplX3QgQ3VybF9zZW5kX3BsYWluKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgaW50IG51bSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKm1lbSwgc2l6ZV90IGxlbiwgQ1VSTGNvZGUgKmNvZGUpCiB7CiAgIGN1cmxfc29ja2V0X3Qgc29ja2ZkID0gY29ubi0+c29ja1tudW1dOwogICBzc2l6ZV90IGJ5dGVzX3dyaXR0ZW4gPSBzd3JpdGUoc29ja2ZkLCBtZW0sIGxlbik7CiAKKyAgKmNvZGUgPSBDVVJMRV9PSzsKICAgaWYoLTEgPT0gYnl0ZXNfd3JpdHRlbikgewogICAgIGludCBlcnIgPSBTT0NLRVJSTk87CiAKQEAgLTI1NSw2NiArMjk0LDIwIEBACiAgICAgICAgICB0cmVhdCBib3RoIGVycm9yIGNvZGVzIHRoZSBzYW1lIGhlcmUgKi8KICAgICAgIChFV09VTERCTE9DSyA9PSBlcnIpIHx8IChFQUdBSU4gPT0gZXJyKSB8fCAoRUlOVFIgPT0gZXJyKQogI2VuZGlmCi0gICAgICApCisgICAgICApIHsKICAgICAgIC8qIHRoaXMgaXMganVzdCBhIGNhc2Ugb2YgRVdPVUxEQkxPQ0sgKi8KICAgICAgIGJ5dGVzX3dyaXR0ZW49MDsKLSAgICBlbHNlCisgICAgICAqY29kZSA9IENVUkxFX0FHQUlOOworICAgIH0gZWxzZSB7CiAgICAgICBmYWlsZihjb25uLT5kYXRhLCAiU2VuZCBmYWlsdXJlOiAlcyIsCiAgICAgICAgICAgICBDdXJsX3N0cmVycm9yKGNvbm4sIGVycikpOworICAgICAgKmNvZGUgPSBDVVJMRV9TRU5EX0VSUk9SOworICAgIH0KICAgfQogICByZXR1cm4gYnl0ZXNfd3JpdHRlbjsKIH0KIAogLyoKLSAqIEN1cmxfd3JpdGUoKSBpcyBhbiBpbnRlcm5hbCB3cml0ZSBmdW5jdGlvbiB0aGF0IHNlbmRzIGRhdGEgdG8gdGhlCi0gKiBzZXJ2ZXIuIFdvcmtzIHdpdGggcGxhaW4gc29ja2V0cywgU0NQLCBTU0wgb3Iga2VyYmVyb3MuCi0gKgotICogSWYgdGhlIHdyaXRlIHdvdWxkIGJsb2NrIChFV09VTERCTE9DSyksIHdlIHJldHVybiBDVVJMRV9PSyBhbmQKLSAqICgqd3JpdHRlbiA9PSAwKS4gT3RoZXJ3aXNlIHdlIHJldHVybiByZWd1bGFyIENVUkxjb2RlIHZhbHVlLgotICovCi1DVVJMY29kZSBDdXJsX3dyaXRlKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKLSAgICAgICAgICAgICAgICAgICAgY3VybF9zb2NrZXRfdCBzb2NrZmQsCi0gICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKm1lbSwKLSAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGxlbiwKLSAgICAgICAgICAgICAgICAgICAgc3NpemVfdCAqd3JpdHRlbikKLXsKLSAgc3NpemVfdCBieXRlc193cml0dGVuOwotICBpbnQgY3VybGNvZGUgPSBDVVJMRV9PSzsKLSAgaW50IG51bSA9IChzb2NrZmQgPT0gY29ubi0+c29ja1tTRUNPTkRBUllTT0NLRVRdKTsKLQotICBpZihjb25uLT5zc2xbbnVtXS5zdGF0ZSA9PSBzc2xfY29ubmVjdGlvbl9jb21wbGV0ZSkKLSAgICBieXRlc193cml0dGVuID0gQ3VybF9zc2xfc2VuZChjb25uLCBudW0sIG1lbSwgbGVuLCAmY3VybGNvZGUpOwotICBlbHNlIGlmKEN1cmxfc3NoX2VuYWJsZWQoY29ubiwgUFJPVF9TQ1ApKQotICAgIGJ5dGVzX3dyaXR0ZW4gPSBDdXJsX3NjcF9zZW5kKGNvbm4sIG51bSwgbWVtLCBsZW4pOwotICBlbHNlIGlmKEN1cmxfc3NoX2VuYWJsZWQoY29ubiwgUFJPVF9TRlRQKSkKLSAgICBieXRlc193cml0dGVuID0gQ3VybF9zZnRwX3NlbmQoY29ubiwgbnVtLCBtZW0sIGxlbik7Ci0gIGVsc2UgaWYoY29ubi0+c2VjX2NvbXBsZXRlKQotICAgIGJ5dGVzX3dyaXR0ZW4gPSBDdXJsX3NlY19zZW5kKGNvbm4sIG51bSwgbWVtLCBsZW4pOwotICBlbHNlCi0gICAgYnl0ZXNfd3JpdHRlbiA9IHNlbmRfcGxhaW4oY29ubiwgbnVtLCBtZW0sIGxlbik7Ci0KLSAgKndyaXR0ZW4gPSBieXRlc193cml0dGVuOwotICBpZigtMSAhPSBieXRlc193cml0dGVuKQotICAgIC8qIHdlIGNvbXBsZXRlbHkgaWdub3JlIHRoZSBjdXJsY29kZSB2YWx1ZSB3aGVuIC0xIGlzIG5vdCByZXR1cm5lZCAqLwotICAgIHJldHVybiBDVVJMRV9PSzsKLQotICAvKiBoYW5kbGUgRVdPVUxEQkxPQ0sgb3IgYSBzZW5kIGZhaWx1cmUgKi8KLSAgc3dpdGNoKGN1cmxjb2RlKSB7Ci0gIGNhc2UgLyogRVdPVUxEQkxPQ0sgKi8gLTE6Ci0gICAgKndyaXR0ZW4gPSAvKiBFV09VTERCTE9DSyAqLyAwOwotICAgIHJldHVybiBDVVJMRV9PSzsKLQotICBjYXNlIENVUkxFX09LOgotICAgIC8qIGdlbmVyYWwgc2VuZCBmYWlsdXJlICovCi0gICAgcmV0dXJuIENVUkxFX1NFTkRfRVJST1I7Ci0KLSAgZGVmYXVsdDoKLSAgICAvKiB3ZSBnb3QgYSBzcGVjaWZpYyBjdXJsY29kZSwgZm9yd2FyZCBpdCAqLwotICAgIHJldHVybiAoQ1VSTGNvZGUpY3VybGNvZGU7Ci0gIH0KLX0KLQotLyoKICAqIEN1cmxfd3JpdGVfcGxhaW4oKSBpcyBhbiBpbnRlcm5hbCB3cml0ZSBmdW5jdGlvbiB0aGF0IHNlbmRzIGRhdGEgdG8gdGhlCiAgKiBzZXJ2ZXIgdXNpbmcgcGxhaW4gc29ja2V0cyBvbmx5LiBPdGhlcndpc2UgbWVhbnQgdG8gaGF2ZSB0aGUgZXhhY3Qgc2FtZQogICogcHJvdG8gYXMgQ3VybF93cml0ZSgpCkBAIC0zMjksMTQgKzMyMiw0NSBAQAogICBDVVJMY29kZSByZXRjb2RlOwogICBpbnQgbnVtID0gKHNvY2tmZCA9PSBjb25uLT5zb2NrW1NFQ09OREFSWVNPQ0tFVF0pOwogCi0gIGJ5dGVzX3dyaXR0ZW4gPSBzZW5kX3BsYWluKGNvbm4sIG51bSwgbWVtLCBsZW4pOworICBieXRlc193cml0dGVuID0gQ3VybF9zZW5kX3BsYWluKGNvbm4sIG51bSwgbWVtLCBsZW4sICZyZXRjb2RlKTsKIAogICAqd3JpdHRlbiA9IGJ5dGVzX3dyaXR0ZW47Ci0gIHJldGNvZGUgPSAoLTEgIT0gYnl0ZXNfd3JpdHRlbik/Q1VSTEVfT0s6Q1VSTEVfU0VORF9FUlJPUjsKIAogICByZXR1cm4gcmV0Y29kZTsKIH0KIAorc3NpemVfdCBDdXJsX3JlY3ZfcGxhaW4oc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBpbnQgbnVtLCBjaGFyICpidWYsCisgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbGVuLCBDVVJMY29kZSAqY29kZSkKK3sKKyAgY3VybF9zb2NrZXRfdCBzb2NrZmQgPSBjb25uLT5zb2NrW251bV07CisgIHNzaXplX3QgbnJlYWQgPSBzcmVhZChzb2NrZmQsIGJ1ZiwgbGVuKTsKKworICAqY29kZSA9IENVUkxFX09LOworICBpZigtMSA9PSBucmVhZCkgeworICAgIGludCBlcnIgPSBTT0NLRVJSTk87CisKKyAgICBpZigKKyNpZmRlZiBXU0FFV09VTERCTE9DSworICAgICAgLyogVGhpcyBpcyBob3cgV2luZG93cyBkb2VzIGl0ICovCisgICAgICAoV1NBRVdPVUxEQkxPQ0sgPT0gZXJyKQorI2Vsc2UKKyAgICAgIC8qIGVycm5vIG1heSBiZSBFV09VTERCTE9DSyBvciBvbiBzb21lIHN5c3RlbXMgRUFHQUlOIHdoZW4gaXQgcmV0dXJuZWQKKyAgICAgICAgIGR1ZSB0byBpdHMgaW5hYmlsaXR5IHRvIHNlbmQgb2ZmIGRhdGEgd2l0aG91dCBibG9ja2luZy4gV2UgdGhlcmVmb3IKKyAgICAgICAgIHRyZWF0IGJvdGggZXJyb3IgY29kZXMgdGhlIHNhbWUgaGVyZSAqLworICAgICAgKEVXT1VMREJMT0NLID09IGVycikgfHwgKEVBR0FJTiA9PSBlcnIpIHx8IChFSU5UUiA9PSBlcnIpCisjZW5kaWYKKyAgICAgICkgeworICAgICAgLyogdGhpcyBpcyBqdXN0IGEgY2FzZSBvZiBFV09VTERCTE9DSyAqLworICAgICAgKmNvZGUgPSBDVVJMRV9BR0FJTjsKKyAgICB9IGVsc2UgeworICAgICAgZmFpbGYoY29ubi0+ZGF0YSwgIlJlY3YgZmFpbHVyZTogJXMiLAorICAgICAgICAgICAgQ3VybF9zdHJlcnJvcihjb25uLCBlcnIpKTsKKyAgICAgICpjb2RlID0gQ1VSTEVfUkVDVl9FUlJPUjsKKyAgICB9CisgIH0KKyAgcmV0dXJuIG5yZWFkOworfQorCiBzdGF0aWMgQ1VSTGNvZGUgcGF1c2V3cml0ZShzdHJ1Y3QgU2Vzc2lvbkhhbmRsZSAqZGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB0eXBlLCAvKiB3aGF0IHR5cGUgb2YgZGF0YSAqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqcHRyLApAQCAtNDc2LDcgKzUwMCw3IEBACiAgIHJldHVybiBDVVJMRV9PSzsKIH0KIAotaW50IEN1cmxfcmVhZF9wbGFpbihjdXJsX3NvY2tldF90IHNvY2tmZCwKK0NVUkxjb2RlIEN1cmxfcmVhZF9wbGFpbihjdXJsX3NvY2tldF90IHNvY2tmZCwKICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpidWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGJ5dGVzZnJvbXNvY2tldCwKICAgICAgICAgICAgICAgICAgICAgICAgICBzc2l6ZV90ICpuKQpAQCAtNDkwLDcgKzUxNCw3IEBACiAjZWxzZQogICAgIGlmKChFV09VTERCTE9DSyA9PSBlcnIpIHx8IChFQUdBSU4gPT0gZXJyKSB8fCAoRUlOVFIgPT0gZXJyKSkKICNlbmRpZgotICAgICAgcmV0dXJuIC0xOworICAgICAgcmV0dXJuIENVUkxFX0FHQUlOOwogICAgIGVsc2UKICAgICAgIHJldHVybiBDVVJMRV9SRUNWX0VSUk9SOwogICB9CkBAIC01MDQsMTUgKzUyOCwxNSBAQAogICogSW50ZXJuYWwgcmVhZC1mcm9tLXNvY2tldCBmdW5jdGlvbi4gVGhpcyBpcyBtZWFudCB0byBkZWFsIHdpdGggcGxhaW4KICAqIHNvY2tldHMsIFNTTCBzb2NrZXRzIGFuZCBrZXJiZXJvcyBzb2NrZXRzLgogICoKLSAqIElmIHRoZSByZWFkIHdvdWxkIGJsb2NrIChFV09VTERCTE9DSykgd2UgcmV0dXJuIC0xLiBPdGhlcndpc2Ugd2UgcmV0dXJuCi0gKiBhIHJlZ3VsYXIgQ1VSTGNvZGUgdmFsdWUuCisgKiBSZXR1cm5zIGEgcmVndWxhciBDVVJMY29kZSB2YWx1ZS4KICAqLwotaW50IEN1cmxfcmVhZChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIC8qIGNvbm5lY3Rpb24gZGF0YSAqLworQ1VSTGNvZGUgQ3VybF9yZWFkKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgLyogY29ubmVjdGlvbiBkYXRhICovCiAgICAgICAgICAgICAgIGN1cmxfc29ja2V0X3Qgc29ja2ZkLCAgICAgLyogcmVhZCBmcm9tIHRoaXMgc29ja2V0ICovCiAgICAgICAgICAgICAgIGNoYXIgKmJ1ZiwgICAgICAgICAgICAgICAgLyogc3RvcmUgcmVhZCBkYXRhIGhlcmUgKi8KICAgICAgICAgICAgICAgc2l6ZV90IHNpemVyZXF1ZXN0ZWQsICAgICAvKiBtYXggYW1vdW50IHRvIHJlYWQgKi8KICAgICAgICAgICAgICAgc3NpemVfdCAqbikgICAgICAgICAgICAgICAvKiBhbW91bnQgYnl0ZXMgcmVhZCAqLwogeworICBDVVJMY29kZSBjdXJsY29kZSA9IENVUkxFX1JFQ1ZfRVJST1I7CiAgIHNzaXplX3QgbnJlYWQgPSAwOwogICBzaXplX3QgYnl0ZXNmcm9tc29ja2V0ID0gMDsKICAgY2hhciAqYnVmZmVydG9maWxsID0gTlVMTDsKQEAgLTU1Miw1MCArNTc2LDE3IEBACiAgICAgYnVmZmVydG9maWxsID0gYnVmOwogICB9CiAKLSAgaWYoY29ubi0+c3NsW251bV0uc3RhdGUgPT0gc3NsX2Nvbm5lY3Rpb25fY29tcGxldGUpIHsKLSAgICBpbnQgY3VybGNvZGUgPSBDVVJMRV9SRUNWX0VSUk9SOwotICAgIG5yZWFkID0gQ3VybF9zc2xfcmVjdihjb25uLCBudW0sIGJ1ZmZlcnRvZmlsbCwgYnl0ZXNmcm9tc29ja2V0LCAmY3VybGNvZGUpOworICBucmVhZCA9IGNvbm4tPnJlY3ZbbnVtXShjb25uLCBudW0sIGJ1ZmZlcnRvZmlsbCwgYnl0ZXNmcm9tc29ja2V0LCAmY3VybGNvZGUpOworICBpZihucmVhZCA8IDApCisgICAgcmV0dXJuIGN1cmxjb2RlOwogCi0gICAgaWYobnJlYWQgPT0gLTEpCi0gICAgICByZXR1cm4gY3VybGNvZGU7CisgIGlmKHBpcGVsaW5pbmcpIHsKKyAgICBtZW1jcHkoYnVmLCBjb25uLT5tYXN0ZXJfYnVmZmVyLCBucmVhZCk7CisgICAgY29ubi0+YnVmX2xlbiA9IG5yZWFkOworICAgIGNvbm4tPnJlYWRfcG9zID0gbnJlYWQ7CiAgIH0KLSAgZWxzZSBpZihDdXJsX3NzaF9lbmFibGVkKGNvbm4sIChQUk9UX1NDUHxQUk9UX1NGVFApKSkgewotICAgIGlmKGNvbm4tPnByb3RvY29sICYgUFJPVF9TQ1ApCi0gICAgICBucmVhZCA9IEN1cmxfc2NwX3JlY3YoY29ubiwgbnVtLCBidWZmZXJ0b2ZpbGwsIGJ5dGVzZnJvbXNvY2tldCk7Ci0gICAgZWxzZSBpZihjb25uLT5wcm90b2NvbCAmIFBST1RfU0ZUUCkKLSAgICAgIG5yZWFkID0gQ3VybF9zZnRwX3JlY3YoY29ubiwgbnVtLCBidWZmZXJ0b2ZpbGwsIGJ5dGVzZnJvbXNvY2tldCk7Ci0jaWZkZWYgTElCU1NIMkNIQU5ORUxfRUFHQUlOCi0gICAgaWYobnJlYWQgPT0gTElCU1NIMkNIQU5ORUxfRUFHQUlOKQotICAgICAgLyogRVdPVUxEQkxPQ0sgKi8KLSAgICAgIHJldHVybiAtMTsKLSNlbmRpZgotICAgIGlmKG5yZWFkIDwgMCkKLSAgICAgIC8qIHNpbmNlIGl0IGlzIG5lZ2F0aXZlIGFuZCBub3QgRUFHQUlOLCBpdCB3YXMgYSBwcm90b2NvbC1sYXllciBlcnJvciAqLwotICAgICAgcmV0dXJuIENVUkxFX1JFQ1ZfRVJST1I7Ci0gIH0KLSAgZWxzZSB7Ci0gICAgaWYoY29ubi0+c2VjX2NvbXBsZXRlKQotICAgICAgbnJlYWQgPSBDdXJsX3NlY19yZWFkKGNvbm4sIHNvY2tmZCwgYnVmZmVydG9maWxsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVzZnJvbXNvY2tldCk7Ci0gICAgLyogVE9ETzogTmVlZCB0byBoYW5kbGUgRUFHQUlOIGhlcmUgc29tZWhvdywgc2ltaWxhciB0byBob3cgaXQKLSAgICAgKiBpcyBkb25lIGluIEN1cmxfcmVhZF9wbGFpbiwgZWl0aGVyIHJpZ2h0IGhlcmUgb3IgaW4gQ3VybF9zZWNfcmVhZAotICAgICAqIGl0c2VsZi4gKi8KLSAgICBlbHNlIHsKLSAgICAgIGludCByZXQgPSBDdXJsX3JlYWRfcGxhaW4oc29ja2ZkLCBidWZmZXJ0b2ZpbGwsIGJ5dGVzZnJvbXNvY2tldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbnJlYWQpOwotICAgICAgaWYocmV0KQotICAgICAgICByZXR1cm4gcmV0OwotICAgIH0KLSAgfQotICBpZihucmVhZCA+PSAwKSB7Ci0gICAgaWYocGlwZWxpbmluZykgewotICAgICAgbWVtY3B5KGJ1ZiwgY29ubi0+bWFzdGVyX2J1ZmZlciwgbnJlYWQpOwotICAgICAgY29ubi0+YnVmX2xlbiA9IG5yZWFkOwotICAgICAgY29ubi0+cmVhZF9wb3MgPSBucmVhZDsKLSAgICB9CiAKLSAgICAqbiArPSBucmVhZDsKLSAgfQorICAqbiArPSBucmVhZDsKIAogICByZXR1cm4gQ1VSTEVfT0s7CiB9CmRpZmYgLS1naXQgYS9saWIvc2VuZGYuaCBiL2xpYi9zZW5kZi5oCmluZGV4IDU3MzJhMGIuLjhmMGVhMjQgMTAwNjQ0Ci0tLSBhL2xpYi9zZW5kZi5oCisrKyBiL2xpYi9zZW5kZi5oCkBAIC01NSwxNSArNTUsMjAgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBsZW4pOwogCiAvKiBpbnRlcm5hbCByZWFkLWZ1bmN0aW9uLCBkb2VzIHBsYWluIHNvY2tldCBvbmx5ICovCi1pbnQgQ3VybF9yZWFkX3BsYWluKGN1cmxfc29ja2V0X3Qgc29ja2ZkLAotICAgICAgICAgICAgICAgICAgICBjaGFyICpidWYsCi0gICAgICAgICAgICAgICAgICAgIHNpemVfdCBieXRlc2Zyb21zb2NrZXQsCi0gICAgICAgICAgICAgICAgICAgIHNzaXplX3QgKm4pOworQ1VSTGNvZGUgQ3VybF9yZWFkX3BsYWluKGN1cmxfc29ja2V0X3Qgc29ja2ZkLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgYnl0ZXNmcm9tc29ja2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgIHNzaXplX3QgKm4pOworCitzc2l6ZV90IEN1cmxfcmVjdl9wbGFpbihzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGludCBudW0sIGNoYXIgKmJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBsZW4sIENVUkxjb2RlICpjb2RlKTsKK3NzaXplX3QgQ3VybF9zZW5kX3BsYWluKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgaW50IG51bSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKm1lbSwgc2l6ZV90IGxlbiwgQ1VSTGNvZGUgKmNvZGUpOwogCiAvKiBpbnRlcm5hbCByZWFkLWZ1bmN0aW9uLCBkb2VzIHBsYWluIHNvY2tldCwgU1NMIGFuZCBrcmI0ICovCi1pbnQgQ3VybF9yZWFkKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgY3VybF9zb2NrZXRfdCBzb2NrZmQsCi0gICAgICAgICAgICAgIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1ZmZlcnNpemUsCi0gICAgICAgICAgICAgIHNzaXplX3QgKm4pOworQ1VSTGNvZGUgQ3VybF9yZWFkKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgY3VybF9zb2NrZXRfdCBzb2NrZmQsCisgICAgICAgICAgICAgICAgICAgY2hhciAqYnVmLCBzaXplX3QgYnVmZmVyc2l6ZSwKKyAgICAgICAgICAgICAgICAgICBzc2l6ZV90ICpuKTsKIC8qIGludGVybmFsIHdyaXRlLWZ1bmN0aW9uLCBkb2VzIHBsYWluIHNvY2tldCwgU1NMLCBTQ1AsIFNGVFAgYW5kIGtyYjQgKi8KIENVUkxjb2RlIEN1cmxfd3JpdGUoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAogICAgICAgICAgICAgICAgICAgICBjdXJsX3NvY2tldF90IHNvY2tmZCwKZGlmZiAtLWdpdCBhL2xpYi9zZXR1cC5oIGIvbGliL3NldHVwLmgKaW5kZXggY2E5OGFkNy4uY2MwMTZjOSAxMDA2NDQKLS0tIGEvbGliL3NldHVwLmgKKysrIGIvbGliL3NldHVwLmgKQEAgLTM1Niw2ICszNTYsMTggQEAKICMgIGVuZGlmCiAjZW5kaWYKIAorLyoKKyAqIEFyZyAyIHR5cGUgZm9yIGdldGhvc3RuYW1lIGluIGNhc2UgaXQgaGFzbid0IGJlZW4gZGVmaW5lZCBpbiBjb25maWcgZmlsZS4KKyAqLworCisjaWZuZGVmIEdFVEhPU1ROQU1FX1RZUEVfQVJHMgorIyAgaWZkZWYgVVNFX1dJTlNPQ0sKKyMgICAgZGVmaW5lIEdFVEhPU1ROQU1FX1RZUEVfQVJHMiBpbnQKKyMgIGVsc2UKKyMgICAgZGVmaW5lIEdFVEhPU1ROQU1FX1RZUEVfQVJHMiBzaXplX3QKKyMgIGVuZGlmCisjZW5kaWYKKwogLyogQmVsb3cgd2UgZGVmaW5lIHNvbWUgZnVuY3Rpb25zLiBUaGV5IHNob3VsZAogCiAgICA0LiBzZXQgdGhlIFNJR0FMUk0gc2lnbmFsIHRpbWVvdXQKQEAgLTQ5Nyw3ICs1MDksNyBAQAogI2lmIGRlZmluZWQoX01TQ19WRVIpICYmICFkZWZpbmVkKF9fUE9DQ19fKQogIyAgaWYgIWRlZmluZWQoSEFWRV9XSU5ET1dTX0gpIHx8ICgoX01TQ19WRVIgPCAxMzAwKSAmJiAhZGVmaW5lZChfRklMRVRJTUVfKSkKICMgICAgaWYgIWRlZmluZWQoQUxMT1dfTVNWQzZfV0lUSE9VVF9QU0RLKQotIyAgICAgIGVycm9yIE1TVkMgNi4wIHJlcXVpcmVzICdGZWJydWFyeSAyMDAzIFBsYXRmb3JtIFNESycgYS5rLmEuICdXaW5kb3dzIFNlcnZlciAyMDAzIFBTREsnCisjICAgICAgZXJyb3IgTVNWQyA2LjAgcmVxdWlyZXMgIkZlYnJ1YXJ5IDIwMDMgUGxhdGZvcm0gU0RLIiBhLmsuYS4gIldpbmRvd3MgU2VydmVyIDIwMDMgUFNESyIKICMgICAgZWxzZQogIyAgICAgIGRlZmluZSBDVVJMX0RJU0FCTEVfTERBUCAxCiAjICAgIGVuZGlmCkBAIC01MjUsMTIgKzUzNywxMiBAQAogCiAjZGVmaW5lIExJQklETl9SRVFVSVJFRF9WRVJTSU9OICIwLjQuMSIKIAotI2lmIGRlZmluZWQoVVNFX0dOVVRMUykgfHwgZGVmaW5lZChVU0VfU1NMRUFZKSB8fCBkZWZpbmVkKFVTRV9OU1MpIHx8IGRlZmluZWQoVVNFX1FTT1NTTCkKKyNpZiBkZWZpbmVkKFVTRV9HTlVUTFMpIHx8IGRlZmluZWQoVVNFX1NTTEVBWSkgfHwgZGVmaW5lZChVU0VfTlNTKSB8fCBkZWZpbmVkKFVTRV9RU09TU0wpIHx8IGRlZmluZWQoVVNFX1BPTEFSU1NMKQogI2RlZmluZSBVU0VfU1NMICAgIC8qIFNTTCBzdXBwb3J0IGhhcyBiZWVuIGVuYWJsZWQgKi8KICNlbmRpZgogCiAjaWYgIWRlZmluZWQoQ1VSTF9ESVNBQkxFX0hUVFApICYmICFkZWZpbmVkKENVUkxfRElTQUJMRV9OVExNKQotI2lmIGRlZmluZWQoVVNFX1NTTEVBWSkgfHwgZGVmaW5lZChVU0VfV0lORE9XU19TU1BJKSB8fCBkZWZpbmVkKFVTRV9HTlVUTFMpCisjaWYgZGVmaW5lZChVU0VfU1NMRUFZKSB8fCBkZWZpbmVkKFVTRV9XSU5ET1dTX1NTUEkpIHx8IGRlZmluZWQoVVNFX0dOVVRMUykgfHwgZGVmaW5lZChVU0VfTlNTKQogI2RlZmluZSBVU0VfTlRMTQogI2VuZGlmCiAjZW5kaWYKQEAgLTU0MCw2ICs1NTIsMTEgQEAKICNkZWZpbmUgQ1VSTF9DQV9CVU5ETEUgZ2V0ZW52KCJDVVJMX0NBX0JVTkRMRSIpCiAjZW5kaWYKIAorLyogRGVmaW5lIFNfSVNSRUcgaWYgbm90IGRlZmluZWQgYnkgc3lzdGVtIGhlYWRlcnMsIGYuZS4gTVNWQyAqLworI2lmICFkZWZpbmVkKFNfSVNSRUcpICYmIGRlZmluZWQoU19JRk1UKSAmJiBkZWZpbmVkKFNfSUZSRUcpCisjZGVmaW5lIFNfSVNSRUcobSkgKCgobSkgJiBTX0lGTVQpID09IFNfSUZSRUcpCisjZW5kaWYKKwogLyoKICAqIEluY2x1ZGUgbWFjcm9zIGFuZCBkZWZpbmVzIHRoYXQgc2hvdWxkIG9ubHkgYmUgcHJvY2Vzc2VkIG9uY2UuCiAgKi8KZGlmZiAtLWdpdCBhL2xpYi9zZXR1cF9vbmNlLmggYi9saWIvc2V0dXBfb25jZS5oCmluZGV4IDQ3M2VlZjIuLjg1ZTc4ZTggMTAwNjQ0Ci0tLSBhL2xpYi9zZXR1cF9vbmNlLmgKKysrIGIvbGliL3NldHVwX29uY2UuaApAQCAtNyw3ICs3LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDA5LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpAQCAtMjYxLDI0ICsyNjEsNDIgQEAKIAogCiAvKgotICogVHlwZWRlZiB0byAndW5zaWduZWQgY2hhcicgaWYgYm9vbCBpcyBub3QgYW4gYXZhaWxhYmxlICd0eXBlZGVmZWQnIHR5cGUuCisgKiAnYm9vbCcgZXhpc3RzIG9uIHBsYXRmb3JtcyB3aXRoIDxzdGRib29sLmg+LCBpLmUuIEM5OSBwbGF0Zm9ybXMuCisgKiBPbiBub24tQzk5IHBsYXRmb3JtcyB0aGVyZSdzIG5vIGJvb2wsIHNvIGRlZmluZSBhbiBlbnVtIGZvciB0aGF0LgorICogT24gQzk5IHBsYXRmb3JtcyAnZmFsc2UnIGFuZCAndHJ1ZScgYWxzbyBleGlzdC4gRW51bSB1c2VzIGEKKyAqIGdsb2JhbCBuYW1lc3BhY2UgdGhvdWdoLCBzbyB1c2UgYm9vbF9mYWxzZSBhbmQgYm9vbF90cnVlLgogICovCiAKICNpZm5kZWYgSEFWRV9CT09MX1QKLXR5cGVkZWYgdW5zaWduZWQgY2hhciBib29sOwotI2RlZmluZSBIQVZFX0JPT0xfVAorICB0eXBlZGVmIGVudW0geworICAgICAgYm9vbF9mYWxzZSA9IDAsCisgICAgICBib29sX3RydWUgID0gMQorICB9IGJvb2w7CisKKy8qCisgKiBVc2UgYSBkZWZpbmUgdG8gbGV0ICd0cnVlJyBhbmQgJ2ZhbHNlJyB1c2UgdGhvc2UgZW51bXMuICBUaGVyZQorICogYXJlIGN1cnJlbnRseSBubyB1c2Ugb2YgdHJ1ZSBhbmQgZmFsc2UgaW4gbGliY3VybCBwcm9wZXIsIGJ1dAorICogdGhlcmUgYXJlIHNvbWUgaW4gdGhlIGV4YW1wbGVzLiBUaGlzIHdpbGwgY2F0ZXIgZm9yIGFueSBsYXRlcgorICogY29kZSBoYXBwZW5pbmcgdG8gdXNlIHRydWUgYW5kIGZhbHNlLgorICovCisjICBkZWZpbmUgZmFsc2UgYm9vbF9mYWxzZQorIyAgZGVmaW5lIHRydWUgIGJvb2xfdHJ1ZQorIyAgZGVmaW5lIEhBVkVfQk9PTF9UCiAjZW5kaWYKIAogCiAvKgotICogRGVmYXVsdCBkZWZpbml0aW9uIG9mIHVwcGVyY2FzZSBUUlVFIGFuZCBGQUxTRS4KKyAqIFJlZGVmaW5lIFRSVUUgYW5kIEZBTFNFIHRvbywgdG8gY2F0Y2ggY3VycmVudCB1c2UuIFdpdGggdGhpcworICogY2hhbmdlLCAnYm9vbCBmb3VuZCA9IDEnIHdpbGwgZ2l2ZSBhIHdhcm5pbmcgb24gTUlQU1BybywgYnV0CisgKiAnYm9vbCBmb3VuZCA9IFRSVUUnIHdpbGwgbm90LiBDaGFuZ2UgdGVzdGVkIG9uIElSSVgvTUlQU1BybywKKyAqIEFJWCA1LjEvWGxjLCBUcnU2NCA1LjEvY2MsIHcvbWFrZSB0ZXN0IHRvby4KICAqLwogCiAjaWZuZGVmIFRSVUUKLSNkZWZpbmUgVFJVRSAxCisjZGVmaW5lIFRSVUUgdHJ1ZQogI2VuZGlmCiAjaWZuZGVmIEZBTFNFCi0jZGVmaW5lIEZBTFNFIDAKKyNkZWZpbmUgRkFMU0UgZmFsc2UKICNlbmRpZgogCiAKQEAgLTM3MywzOCArMzkxLDYzIEBACiAjZGVmaW5lIEVJTlRSICAgICAgICAgICAgV1NBRUlOVFIKICN1bmRlZiAgRUlOVkFMICAgICAgICAgICAvKiBvdmVycmlkZSBkZWZpbml0aW9uIGluIGVycm5vLmggKi8KICNkZWZpbmUgRUlOVkFMICAgICAgICAgICBXU0FFSU5WQUwKKyN1bmRlZiAgRVdPVUxEQkxPQ0sgICAgICAvKiBvdmVycmlkZSBkZWZpbml0aW9uIGluIGVycm5vLmggKi8KICNkZWZpbmUgRVdPVUxEQkxPQ0sgICAgICBXU0FFV09VTERCTE9DSworI3VuZGVmICBFSU5QUk9HUkVTUyAgICAgIC8qIG92ZXJyaWRlIGRlZmluaXRpb24gaW4gZXJybm8uaCAqLwogI2RlZmluZSBFSU5QUk9HUkVTUyAgICAgIFdTQUVJTlBST0dSRVNTCisjdW5kZWYgIEVBTFJFQURZICAgICAgICAgLyogb3ZlcnJpZGUgZGVmaW5pdGlvbiBpbiBlcnJuby5oICovCiAjZGVmaW5lIEVBTFJFQURZICAgICAgICAgV1NBRUFMUkVBRFkKKyN1bmRlZiAgRU5PVFNPQ0sgICAgICAgICAvKiBvdmVycmlkZSBkZWZpbml0aW9uIGluIGVycm5vLmggKi8KICNkZWZpbmUgRU5PVFNPQ0sgICAgICAgICBXU0FFTk9UU09DSworI3VuZGVmICBFREVTVEFERFJSRVEgICAgIC8qIG92ZXJyaWRlIGRlZmluaXRpb24gaW4gZXJybm8uaCAqLwogI2RlZmluZSBFREVTVEFERFJSRVEgICAgIFdTQUVERVNUQUREUlJFUQorI3VuZGVmICBFTVNHU0laRSAgICAgICAgIC8qIG92ZXJyaWRlIGRlZmluaXRpb24gaW4gZXJybm8uaCAqLwogI2RlZmluZSBFTVNHU0laRSAgICAgICAgIFdTQUVNU0dTSVpFCisjdW5kZWYgIEVQUk9UT1RZUEUgICAgICAgLyogb3ZlcnJpZGUgZGVmaW5pdGlvbiBpbiBlcnJuby5oICovCiAjZGVmaW5lIEVQUk9UT1RZUEUgICAgICAgV1NBRVBST1RPVFlQRQorI3VuZGVmICBFTk9QUk9UT09QVCAgICAgIC8qIG92ZXJyaWRlIGRlZmluaXRpb24gaW4gZXJybm8uaCAqLwogI2RlZmluZSBFTk9QUk9UT09QVCAgICAgIFdTQUVOT1BST1RPT1BUCisjdW5kZWYgIEVQUk9UT05PU1VQUE9SVCAgLyogb3ZlcnJpZGUgZGVmaW5pdGlvbiBpbiBlcnJuby5oICovCiAjZGVmaW5lIEVQUk9UT05PU1VQUE9SVCAgV1NBRVBST1RPTk9TVVBQT1JUCiAjZGVmaW5lIEVTT0NLVE5PU1VQUE9SVCAgV1NBRVNPQ0tUTk9TVVBQT1JUCisjdW5kZWYgIEVPUE5PVFNVUFAgICAgICAgLyogb3ZlcnJpZGUgZGVmaW5pdGlvbiBpbiBlcnJuby5oICovCiAjZGVmaW5lIEVPUE5PVFNVUFAgICAgICAgV1NBRU9QTk9UU1VQUAogI2RlZmluZSBFUEZOT1NVUFBPUlQgICAgIFdTQUVQRk5PU1VQUE9SVAorI3VuZGVmICBFQUZOT1NVUFBPUlQgICAgIC8qIG92ZXJyaWRlIGRlZmluaXRpb24gaW4gZXJybm8uaCAqLwogI2RlZmluZSBFQUZOT1NVUFBPUlQgICAgIFdTQUVBRk5PU1VQUE9SVAorI3VuZGVmICBFQUREUklOVVNFICAgICAgIC8qIG92ZXJyaWRlIGRlZmluaXRpb24gaW4gZXJybm8uaCAqLwogI2RlZmluZSBFQUREUklOVVNFICAgICAgIFdTQUVBRERSSU5VU0UKKyN1bmRlZiAgRUFERFJOT1RBVkFJTCAgICAvKiBvdmVycmlkZSBkZWZpbml0aW9uIGluIGVycm5vLmggKi8KICNkZWZpbmUgRUFERFJOT1RBVkFJTCAgICBXU0FFQUREUk5PVEFWQUlMCisjdW5kZWYgIEVORVRET1dOICAgICAgICAgLyogb3ZlcnJpZGUgZGVmaW5pdGlvbiBpbiBlcnJuby5oICovCiAjZGVmaW5lIEVORVRET1dOICAgICAgICAgV1NBRU5FVERPV04KKyN1bmRlZiAgRU5FVFVOUkVBQ0ggICAgICAvKiBvdmVycmlkZSBkZWZpbml0aW9uIGluIGVycm5vLmggKi8KICNkZWZpbmUgRU5FVFVOUkVBQ0ggICAgICBXU0FFTkVUVU5SRUFDSAorI3VuZGVmICBFTkVUUkVTRVQgICAgICAgIC8qIG92ZXJyaWRlIGRlZmluaXRpb24gaW4gZXJybm8uaCAqLwogI2RlZmluZSBFTkVUUkVTRVQgICAgICAgIFdTQUVORVRSRVNFVAorI3VuZGVmICBFQ09OTkFCT1JURUQgICAgIC8qIG92ZXJyaWRlIGRlZmluaXRpb24gaW4gZXJybm8uaCAqLwogI2RlZmluZSBFQ09OTkFCT1JURUQgICAgIFdTQUVDT05OQUJPUlRFRAorI3VuZGVmICBFQ09OTlJFU0VUICAgICAgIC8qIG92ZXJyaWRlIGRlZmluaXRpb24gaW4gZXJybm8uaCAqLwogI2RlZmluZSBFQ09OTlJFU0VUICAgICAgIFdTQUVDT05OUkVTRVQKKyN1bmRlZiAgRU5PQlVGUyAgICAgICAgICAvKiBvdmVycmlkZSBkZWZpbml0aW9uIGluIGVycm5vLmggKi8KICNkZWZpbmUgRU5PQlVGUyAgICAgICAgICBXU0FFTk9CVUZTCisjdW5kZWYgIEVJU0NPTk4gICAgICAgICAgLyogb3ZlcnJpZGUgZGVmaW5pdGlvbiBpbiBlcnJuby5oICovCiAjZGVmaW5lIEVJU0NPTk4gICAgICAgICAgV1NBRUlTQ09OTgorI3VuZGVmICBFTk9UQ09OTiAgICAgICAgIC8qIG92ZXJyaWRlIGRlZmluaXRpb24gaW4gZXJybm8uaCAqLwogI2RlZmluZSBFTk9UQ09OTiAgICAgICAgIFdTQUVOT1RDT05OCiAjZGVmaW5lIEVTSFVURE9XTiAgICAgICAgV1NBRVNIVVRET1dOCiAjZGVmaW5lIEVUT09NQU5ZUkVGUyAgICAgV1NBRVRPT01BTllSRUZTCisjdW5kZWYgIEVUSU1FRE9VVCAgICAgICAgLyogb3ZlcnJpZGUgZGVmaW5pdGlvbiBpbiBlcnJuby5oICovCiAjZGVmaW5lIEVUSU1FRE9VVCAgICAgICAgV1NBRVRJTUVET1VUCisjdW5kZWYgIEVDT05OUkVGVVNFRCAgICAgLyogb3ZlcnJpZGUgZGVmaW5pdGlvbiBpbiBlcnJuby5oICovCiAjZGVmaW5lIEVDT05OUkVGVVNFRCAgICAgV1NBRUNPTk5SRUZVU0VECisjdW5kZWYgIEVMT09QICAgICAgICAgICAgLyogb3ZlcnJpZGUgZGVmaW5pdGlvbiBpbiBlcnJuby5oICovCiAjZGVmaW5lIEVMT09QICAgICAgICAgICAgV1NBRUxPT1AKICNpZm5kZWYgRU5BTUVUT09MT05HICAgICAvKiBwb3NzaWJsZSBwcmV2aW91cyBkZWZpbml0aW9uIGluIGVycm5vLmggKi8KICNkZWZpbmUgRU5BTUVUT09MT05HICAgICBXU0FFTkFNRVRPT0xPTkcKICNlbmRpZgogI2RlZmluZSBFSE9TVERPV04gICAgICAgIFdTQUVIT1NURE9XTgorI3VuZGVmICBFSE9TVFVOUkVBQ0ggICAgIC8qIG92ZXJyaWRlIGRlZmluaXRpb24gaW4gZXJybm8uaCAqLwogI2RlZmluZSBFSE9TVFVOUkVBQ0ggICAgIFdTQUVIT1NUVU5SRUFDSAogI2lmbmRlZiBFTk9URU1QVFkgICAgICAgIC8qIHBvc3NpYmxlIHByZXZpb3VzIGRlZmluaXRpb24gaW4gZXJybm8uaCAqLwogI2RlZmluZSBFTk9URU1QVFkgICAgICAgIFdTQUVOT1RFTVBUWQpkaWZmIC0tZ2l0IGEvbGliL3NtdHAuYyBiL2xpYi9zbXRwLmMKaW5kZXggNjU0ZjQzNS4uNTVlMDNkNSAxMDA2NDQKLS0tIGEvbGliL3NtdHAuYworKysgYi9saWIvc210cC5jCkBAIC0yMCw2ICsyMCw5IEBACiAgKgogICogUkZDMjgyMSBTTVRQIHByb3RvY29sCiAgKiBSRkMzMjA3IFNNVFAgb3ZlciBUTFMKKyAqIFJGQzQ5NTQgU01UUCBBdXRoZW50aWNhdGlvbgorICogUkZDMjE5NSBDUkFNLU1ENSBhdXRoZW50aWNhdGlvbgorICogUkZDNDYxNiBQTEFJTiBhdXRoZW50aWNhdGlvbgogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKQEAgLTg1LDYgKzg4LDEwIEBACiAjaW5jbHVkZSAidXJsLmgiCiAjaW5jbHVkZSAicmF3c3RyLmgiCiAjaW5jbHVkZSAic3RydG9vZmZ0LmgiCisjaW5jbHVkZSAiY3VybF9iYXNlNjQuaCIKKyNpbmNsdWRlICJjdXJsX21kNS5oIgorI2luY2x1ZGUgImN1cmxfaG1hYy5oIgorI2luY2x1ZGUgImN1cmxfZ2V0aG9zdG5hbWUuaCIKIAogI2RlZmluZSBfTVBSSU5URl9SRVBMQUNFIC8qIHVzZSBvdXIgZnVuY3Rpb25zIG9ubHkgKi8KICNpbmNsdWRlIDxjdXJsL21wcmludGYuaD4KQEAgLTIwMiwyNiArMjA5LDc0IEBACiAjZW5kaWYKIAogCi0vKiBmdWNudGlvbiB0aGF0IGNoZWNrcyBmb3IgYW4gZW5kaW5nIHNtdHAgc3RhdHVzIGNvZGUgYXQgdGhlIHN0YXJ0IG9mIHRoZQotICAgZ2l2ZW4gc3RyaW5nICovCisvKiBGdW5jdGlvbiB0aGF0IGNoZWNrcyBmb3IgYW4gZW5kaW5nIHNtdHAgc3RhdHVzIGNvZGUgYXQgdGhlIHN0YXJ0IG9mIHRoZQorICAgZ2l2ZW4gc3RyaW5nLgorICAgQXMgYSBzaWRlIGVmZmVjdCwgaXQgYWxzbyBmbGFncyBhbGxvd2VkIGF1dGhlbnRpY2F0aW9uIG1lY2hhbmlzbXMgYWNjb3JkaW5nCisgICB0byBFSExPIEFVVEggcmVzcG9uc2UuICovCiBzdGF0aWMgaW50IHNtdHBfZW5kb2ZyZXNwKHN0cnVjdCBwaW5ncG9uZyAqcHAsIGludCAqcmVzcCkKIHsKICAgY2hhciAqbGluZSA9IHBwLT5saW5lc3RhcnRfcmVzcDsKICAgc2l6ZV90IGxlbiA9IHBwLT5ucmVhZF9yZXNwOworICBzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4gPSBwcC0+Y29ubjsKKyAgc3RydWN0IHNtdHBfY29ubiAqc210cGMgPSAmY29ubi0+cHJvdG8uc210cGM7CisgIGludCByZXN1bHQ7CisgIHNpemVfdCB3b3JkbGVuOwogCi0gIGlmKCAobGVuID49IDQpICYmICgnICcgPT0gbGluZVszXSkgJiYKLSAgICAgIElTRElHSVQobGluZVswXSkgJiYgSVNESUdJVChsaW5lWzFdKSAmJiBJU0RJR0lUKGxpbmVbMl0pKSB7Ci0gICAgKnJlc3A9YXRvaShsaW5lKTsKLSAgICByZXR1cm4gVFJVRTsKKyAgaWYobGVuIDwgNCB8fCAhSVNESUdJVChsaW5lWzBdKSB8fCAhSVNESUdJVChsaW5lWzFdKSB8fCAhSVNESUdJVChsaW5lWzJdKSkKKyAgICByZXR1cm4gRkFMU0U7ICAgICAgIC8qIE5vdGhpbmcgZm9yIHVzLiAqLworCisgIGlmKChyZXN1bHQgPSBsaW5lWzNdID09ICcgJykpCisgICAgKnJlc3AgPSBhdG9pKGxpbmUpOworCisgIGxpbmUgKz0gNDsKKyAgbGVuIC09IDQ7CisKKyAgaWYoc210cGMtPnN0YXRlID09IFNNVFBfRUhMTyAmJiBsZW4gPj0gNSAmJiAhbWVtY21wKGxpbmUsICJBVVRIICIsIDUpKSB7CisgICAgbGluZSArPSA1OworICAgIGxlbiAtPSA1OworCisgICAgZm9yICg7OykgeworICAgICAgd2hpbGUgKGxlbiAmJgorICAgICAgICAgICAgICgqbGluZSA9PSAnICcgfHwgKmxpbmUgPT0gJ1x0JyB8fAorICAgICAgICAgICAgICAqbGluZSA9PSAnXHInIHx8ICpsaW5lID09ICdcbicpKSB7CisgICAgICAgIGxpbmUrKzsKKyAgICAgICAgbGVuLS07CisgICAgICB9CisKKyAgICAgIGlmKCFsZW4pCisgICAgICAgIGJyZWFrOworCisgICAgICBmb3IgKHdvcmRsZW4gPSAwOyB3b3JkbGVuIDwgbGVuICYmIGxpbmVbd29yZGxlbl0gIT0gJyAnICYmCisgICAgICAgICAgICAgbGluZVt3b3JkbGVuXSAhPSAnXHQnICYmIGxpbmVbd29yZGxlbl0gIT0gJ1xyJyAmJgorICAgICAgICAgICAgIGxpbmVbd29yZGxlbl0gIT0gJ1xuJzspCisgICAgICAgIHdvcmRsZW4rKzsKKworICAgICAgaWYod29yZGxlbiA9PSA1ICYmICFtZW1jbXAobGluZSwgIkxPR0lOIiwgNSkpCisgICAgICAgIHNtdHBjLT5hdXRobWVjaHMgfD0gU01UUF9BVVRIX0xPR0lOOworICAgICAgZWxzZSBpZih3b3JkbGVuID09IDUgJiYgIW1lbWNtcChsaW5lLCAiUExBSU4iLCA1KSkKKyAgICAgICAgc210cGMtPmF1dGhtZWNocyB8PSBTTVRQX0FVVEhfUExBSU47CisgICAgICBlbHNlIGlmKHdvcmRsZW4gPT0gOCAmJiAhbWVtY21wKGxpbmUsICJDUkFNLU1ENSIsIDgpKQorICAgICAgICBzbXRwYy0+YXV0aG1lY2hzIHw9IFNNVFBfQVVUSF9DUkFNX01ENTsKKyAgICAgIGVsc2UgaWYod29yZGxlbiA9PSAxMCAmJiAhbWVtY21wKGxpbmUsICJESUdFU1QtTUQ1IiwgMTApKQorICAgICAgICBzbXRwYy0+YXV0aG1lY2hzIHw9IFNNVFBfQVVUSF9ESUdFU1RfTUQ1OworICAgICAgZWxzZSBpZih3b3JkbGVuID09IDYgJiYgIW1lbWNtcChsaW5lLCAiR1NTQVBJIiwgNikpCisgICAgICAgIHNtdHBjLT5hdXRobWVjaHMgfD0gU01UUF9BVVRIX0dTU0FQSTsKKyAgICAgIGVsc2UgaWYod29yZGxlbiA9PSA4ICYmICFtZW1jbXAobGluZSwgIkVYVEVSTkFMIiwgOCkpCisgICAgICAgIHNtdHBjLT5hdXRobWVjaHMgfD0gU01UUF9BVVRIX0VYVEVSTkFMOworCisgICAgICBsaW5lICs9IHdvcmRsZW47CisgICAgICBsZW4gLT0gd29yZGxlbjsKKyAgICB9CiAgIH0KIAotICByZXR1cm4gRkFMU0U7IC8qIG5vdGhpbmcgZm9yIHVzICovCisgIHJldHVybiByZXN1bHQ7CiB9CiAKIC8qIFRoaXMgaXMgdGhlIE9OTFkgd2F5IHRvIGNoYW5nZSBTTVRQIHN0YXRlISAqLwogc3RhdGljIHZvaWQgc3RhdGUoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAogICAgICAgICAgICAgICAgICAgc210cHN0YXRlIG5ld3N0YXRlKQogeworICBzdHJ1Y3Qgc210cF9jb25uICpzbXRwYyA9ICZjb25uLT5wcm90by5zbXRwYzsKICNpZiBkZWZpbmVkKERFQlVHQlVJTEQpICYmICFkZWZpbmVkKENVUkxfRElTQUJMRV9WRVJCT1NFX1NUUklOR1MpCiAgIC8qIGZvciBkZWJ1ZyBwdXJwb3NlcyAqLwogICBzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IG5hbWVzW109ewpAQCAtMjMwLDYgKzI4NSwxMSBAQAogICAgICJFSExPIiwKICAgICAiSEVMTyIsCiAgICAgIlNUQVJUVExTIiwKKyAgICAiQVVUSFBMQUlOIiwKKyAgICAiQVVUSExPR0lOIiwKKyAgICAiQVVUSFBBU1NXRCIsCisgICAgIkFVVEhDUkFNIiwKKyAgICAiQVVUSCIsCiAgICAgIk1BSUwiLAogICAgICJSQ1BUIiwKICAgICAiREFUQSIsCkBAIC0yMzcsOSArMjk3LDYgQEAKICAgICAiUVVJVCIsCiAgICAgLyogTEFTVCAqLwogICB9OwotI2VuZGlmCi0gIHN0cnVjdCBzbXRwX2Nvbm4gKnNtdHBjID0gJmNvbm4tPnByb3RvLnNtdHBjOwotI2lmIGRlZmluZWQoREVCVUdCVUlMRCkgJiYgIWRlZmluZWQoQ1VSTF9ESVNBQkxFX1ZFUkJPU0VfU1RSSU5HUykKICAgaWYoc210cGMtPnN0YXRlICE9IG5ld3N0YXRlKQogICAgIGluZm9mKGNvbm4tPmRhdGEsICJTTVRQICVwIHN0YXRlIGNoYW5nZSBmcm9tICVzIHRvICVzXG4iLAogICAgICAgICAgIHNtdHBjLCBuYW1lc1tzbXRwYy0+c3RhdGVdLCBuYW1lc1tuZXdzdGF0ZV0pOwpAQCAtMjUyLDggKzMwOSwxMCBAQAogICBDVVJMY29kZSByZXN1bHQ7CiAgIHN0cnVjdCBzbXRwX2Nvbm4gKnNtdHBjID0gJmNvbm4tPnByb3RvLnNtdHBjOwogCisgIHNtdHBjLT5hdXRobWVjaHMgPSAwOyAgICAgICAgIC8qIE5vIGtub3duIGF1dGhlbnRpY2F0aW9uIG1lY2hhbmlzbXMgeWV0LiAqLworCiAgIC8qIHNlbmQgRUhMTyAqLwotICByZXN1bHQgPSBDdXJsX3BwX3NlbmRmKCZjb25uLT5wcm90by5zbXRwYy5wcCwgIkVITE8gJXMiLCBzbXRwYy0+ZG9tYWluKTsKKyAgcmVzdWx0ID0gQ3VybF9wcF9zZW5kZigmc210cGMtPnBwLCAiRUhMTyAlcyIsIHNtdHBjLT5kb21haW4pOwogCiAgIGlmKHJlc3VsdCkKICAgICByZXR1cm4gcmVzdWx0OwpAQCAtMjY4LDcgKzMyNyw3IEBACiAgIHN0cnVjdCBzbXRwX2Nvbm4gKnNtdHBjID0gJmNvbm4tPnByb3RvLnNtdHBjOwogCiAgIC8qIHNlbmQgSEVMTyAqLwotICByZXN1bHQgPSBDdXJsX3BwX3NlbmRmKCZjb25uLT5wcm90by5zbXRwYy5wcCwgIkhFTE8gJXMiLCBzbXRwYy0+ZG9tYWluKTsKKyAgcmVzdWx0ID0gQ3VybF9wcF9zZW5kZigmc210cGMtPnBwLCAiSEVMTyAlcyIsIHNtdHBjLT5kb21haW4pOwogCiAgIGlmKHJlc3VsdCkKICAgICByZXR1cm4gcmVzdWx0OwpAQCAtMjc3LDYgKzMzNiwxMTEgQEAKICAgcmV0dXJuIENVUkxFX09LOwogfQogCitzdGF0aWMgc2l6ZV90IHNtdHBfYXV0aF9wbGFpbl9kYXRhKHN0cnVjdCBjb25uZWN0ZGF0YSAqIGNvbm4sIGNoYXIgKiAqIG91dHB0cikKK3sKKyAgY2hhciBwbGFpbmF1dGhbMiAqIE1BWF9DVVJMX1VTRVJfTEVOR1RIICsgTUFYX0NVUkxfUEFTU1dPUkRfTEVOR1RIXTsKKyAgc2l6ZV90IHVsZW47CisgIHNpemVfdCBwbGVuOworCisgIHVsZW4gPSBzdHJsZW4oY29ubi0+dXNlcik7CisgIHBsZW4gPSBzdHJsZW4oY29ubi0+cGFzc3dkKTsKKworICBpZigyICogdWxlbiArIHBsZW4gKyAyID4gc2l6ZW9mIHBsYWluYXV0aCkKKyAgICByZXR1cm4gMDsKKworICBtZW1jcHkocGxhaW5hdXRoLCBjb25uLT51c2VyLCB1bGVuKTsKKyAgcGxhaW5hdXRoW3VsZW5dID0gJ1wwJzsKKyAgbWVtY3B5KHBsYWluYXV0aCArIHVsZW4gKyAxLCBjb25uLT51c2VyLCB1bGVuKTsKKyAgcGxhaW5hdXRoWzIgKiB1bGVuICsgMV0gPSAnXDAnOworICBtZW1jcHkocGxhaW5hdXRoICsgMiAqIHVsZW4gKyAyLCBjb25uLT5wYXNzd2QsIHBsZW4pOworICByZXR1cm4gQ3VybF9iYXNlNjRfZW5jb2RlKGNvbm4tPmRhdGEsIHBsYWluYXV0aCwgMiAqIHVsZW4gKyBwbGVuICsgMiwgb3V0cHRyKTsKK30KKworc3RhdGljIHNpemVfdCBzbXRwX2F1dGhfbG9naW5fdXNlcihzdHJ1Y3QgY29ubmVjdGRhdGEgKiBjb25uLCBjaGFyICogKiBvdXRwdHIpCit7CisgIHNpemVfdCB1bGVuOworCisgIHVsZW4gPSBzdHJsZW4oY29ubi0+dXNlcik7CisKKyAgaWYoIXVsZW4pIHsKKyAgICAqb3V0cHRyID0gc3RyZHVwKCI9Iik7CisgICAgcmV0dXJuICpvdXRwdHI/IDE6IDA7CisgIH0KKworICByZXR1cm4gQ3VybF9iYXNlNjRfZW5jb2RlKGNvbm4tPmRhdGEsIGNvbm4tPnVzZXIsIHVsZW4sIG91dHB0cik7Cit9CisKK3N0YXRpYyBDVVJMY29kZSBzbXRwX2F1dGhlbnRpY2F0ZShzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pCit7CisgIENVUkxjb2RlIHJlc3VsdCA9IENVUkxFX09LOworICBzdHJ1Y3Qgc210cF9jb25uICpzbXRwYyA9ICZjb25uLT5wcm90by5zbXRwYzsKKyAgY2hhciAqIGluaXRyZXNwOworICBjb25zdCBjaGFyICogbWVjaDsKKyAgc2l6ZV90IGw7CisgIHNtdHBzdGF0ZSBzdGF0ZTE7CisgIHNtdHBzdGF0ZSBzdGF0ZTI7CisKKyAgaWYoIWNvbm4tPmJpdHMudXNlcl9wYXNzd2QpCisgICAgc3RhdGUoY29ubiwgU01UUF9TVE9QKTsgICAgICAgICAgICAgLyogRW5kIG9mIGNvbm5lY3QgcGhhc2UuICovCisgIGVsc2UgeworICAgIGluaXRyZXNwID0gKGNoYXIgKikgTlVMTDsKKyAgICBsID0gMTsKKworICAgIC8qIENoZWNrIHN1cHBvcnRlZCBhdXRoZW50aWNhdGlvbiBtZWNoYW5pc21zIGJ5IGRlY3JlYXNpbmcgb3JkZXIgb2YKKyAgICAgICBwcmVmZXJlbmNlLiAqLworICAgIG1lY2ggPSAoY29uc3QgY2hhciAqKSBOVUxMOyAgICAgICAgIC8qIEF2b2lkIGNvbXBpbGVyIHdhcm5pbmdzLiAqLworICAgIHN0YXRlMSA9IFNNVFBfU1RPUDsKKyAgICBzdGF0ZTIgPSBTTVRQX1NUT1A7CisKKyNpZm5kZWYgQ1VSTF9ESVNBQkxFX0NSWVBUT19BVVRICisgICAgaWYoc210cGMtPmF1dGhtZWNocyAmIFNNVFBfQVVUSF9DUkFNX01ENSkgeworICAgICAgbWVjaCA9ICJDUkFNLU1ENSI7CisgICAgICBzdGF0ZTEgPSBTTVRQX0FVVEhDUkFNOworICAgIH0KKyAgICBlbHNlCisjZW5kaWYKKyAgICBpZihzbXRwYy0+YXV0aG1lY2hzICYgU01UUF9BVVRIX1BMQUlOKSB7CisgICAgICBtZWNoID0gIlBMQUlOIjsKKyAgICAgIHN0YXRlMSA9IFNNVFBfQVVUSFBMQUlOOworICAgICAgc3RhdGUyID0gU01UUF9BVVRIOworICAgICAgbCA9IHNtdHBfYXV0aF9wbGFpbl9kYXRhKGNvbm4sICZpbml0cmVzcCk7CisgICAgfQorICAgIGVsc2UgaWYoc210cGMtPmF1dGhtZWNocyAmIFNNVFBfQVVUSF9MT0dJTikgeworICAgICAgbWVjaCA9ICJMT0dJTiI7CisgICAgICBzdGF0ZTEgPSBTTVRQX0FVVEhMT0dJTjsKKyAgICAgIHN0YXRlMiA9IFNNVFBfQVVUSFBBU1NXRDsKKyAgICAgIGwgPSBzbXRwX2F1dGhfbG9naW5fdXNlcihjb25uLCAmaW5pdHJlc3ApOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIGluZm9mKGNvbm4tPmRhdGEsICJObyBrbm93biBhdXRoIG1lY2hhbmlzbXMgc3VwcG9ydGVkIVxuIik7CisgICAgICByZXN1bHQgPSBDVVJMRV9MT0dJTl9ERU5JRUQ7ICAgICAgLyogT3RoZXIgbWVjaGFuaXNtcyBub3Qgc3VwcG9ydGVkLiAqLworICAgIH0KKworICAgIGlmKCFyZXN1bHQpIHsKKyAgICAgIGlmKCFsKQorICAgICAgICByZXN1bHQgPSBDVVJMRV9PVVRfT0ZfTUVNT1JZOworICAgICAgZWxzZSBpZihpbml0cmVzcCAmJgorICAgICAgICAgICAgICBsICsgc3RybGVuKG1lY2gpIDw9IDUxMiAtIDgpIHsgICAvKiBBVVRIIDxtZWNoPiAuLi48Y3JsZj4gKi8KKyAgICAgICAgcmVzdWx0ID0gQ3VybF9wcF9zZW5kZigmc210cGMtPnBwLCAiQVVUSCAlcyAlcyIsIG1lY2gsIGluaXRyZXNwKTsKKyAgICAgICAgZnJlZShpbml0cmVzcCk7CisKKyAgICAgICAgaWYoIXJlc3VsdCkKKyAgICAgICAgICBzdGF0ZShjb25uLCBzdGF0ZTIpOworICAgICAgfQorICAgICAgZWxzZSB7CisgICAgICAgIEN1cmxfc2FmZWZyZWUoaW5pdHJlc3ApOworCisgICAgICAgIHJlc3VsdCA9IEN1cmxfcHBfc2VuZGYoJnNtdHBjLT5wcCwgIkFVVEggJXMiLCBtZWNoKTsKKworICAgICAgICBpZighcmVzdWx0KQorICAgICAgICAgIHN0YXRlKGNvbm4sIHN0YXRlMSk7CisgICAgICB9CisgICAgfQorICB9CisKKyAgcmV0dXJuIHJlc3VsdDsKK30KKwogLyogRm9yIHRoZSBTTVRQICJwcm90b2NvbCBjb25uZWN0IiBhbmQgImRvaW5nIiBwaGFzZXMgb25seSAqLwogc3RhdGljIGludCBzbXRwX2dldHNvY2soc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAogICAgICAgICAgICAgICAgICAgICAgICAgY3VybF9zb2NrZXRfdCAqc29ja3MsCkBAIC0yOTUsMTIgKzQ1OSwxMiBAQAogICAodm9pZClpbnN0YXRlOyAvKiBubyB1c2UgZm9yIHRoaXMgeWV0ICovCiAKICAgaWYoc210cGNvZGUgIT0gMjIwKSB7Ci0gICAgaWYoZGF0YS0+c2V0LmZ0cF9zc2wgPT0gQ1VSTFVTRVNTTF9UUlkpCi0gICAgICBzdGF0ZShjb25uLCBTTVRQX1NUT1ApOwotICAgIGVsc2UgeworICAgIGlmKGRhdGEtPnNldC5mdHBfc3NsICE9IENVUkxVU0VTU0xfVFJZKSB7CiAgICAgICBmYWlsZihkYXRhLCAiU1RBUlRUTFMgZGVuaWVkLiAlYyIsIHNtdHBjb2RlKTsKICAgICAgIHJlc3VsdCA9IENVUkxFX0xPR0lOX0RFTklFRDsKICAgICB9CisgICAgZWxzZQorICAgICAgcmVzdWx0ID0gc210cF9hdXRoZW50aWNhdGUoY29ubik7CiAgIH0KICAgZWxzZSB7CiAgICAgLyogQ3VybF9zc2xfY29ubmVjdCBpcyBCTE9DS0lORyAqLwpAQCAtMzI0LDIzICs0ODgsMjMgQEAKICAgKHZvaWQpaW5zdGF0ZTsgLyogbm8gdXNlIGZvciB0aGlzIHlldCAqLwogCiAgIGlmKHNtdHBjb2RlLzEwMCAhPSAyKSB7Ci0gICAgaWYoZGF0YS0+c2V0LmZ0cF9zc2wgPD0gQ1VSTFVTRVNTTF9UUlkpCisgICAgaWYoKGRhdGEtPnNldC5mdHBfc3NsIDw9IENVUkxVU0VTU0xfVFJZIHx8IGNvbm4tPnNzbFtGSVJTVFNPQ0tFVF0udXNlKSAmJgorICAgICAhY29ubi0+Yml0cy51c2VyX3Bhc3N3ZCkKICAgICAgIHJlc3VsdCA9IHNtdHBfc3RhdGVfaGVsbyhjb25uKTsKICAgICBlbHNlIHsKICAgICAgIGZhaWxmKGRhdGEsICJBY2Nlc3MgZGVuaWVkOiAlZCIsIHNtdHBjb2RlKTsKICAgICAgIHJlc3VsdCA9IENVUkxFX0xPR0lOX0RFTklFRDsKICAgICB9Ci0gIH0gCisgIH0KICAgZWxzZSBpZihkYXRhLT5zZXQuZnRwX3NzbCAmJiAhY29ubi0+c3NsW0ZJUlNUU09DS0VUXS51c2UpIHsKICAgICAvKiBXZSBkb24ndCBoYXZlIGEgU1NML1RMUyBjb25uZWN0aW9uIHlldCwgYnV0IFNTTCBpcyByZXF1ZXN0ZWQuIFN3aXRjaAogICAgICAgIHRvIFRMUyBjb25uZWN0aW9uIG5vdyAqLwotICAgIHJlc3VsdCA9IEN1cmxfcHBfc2VuZGYoJmNvbm4tPnByb3RvLnNtdHBjLnBwLCAiU1RBUlRUTFMiLCBOVUxMKTsKKyAgICByZXN1bHQgPSBDdXJsX3BwX3NlbmRmKCZjb25uLT5wcm90by5zbXRwYy5wcCwgIlNUQVJUVExTIik7CiAgICAgc3RhdGUoY29ubiwgU01UUF9TVEFSVFRMUyk7CiAgIH0KLSAgZWxzZSB7Ci0gICAgLyogZW5kIHRoZSBjb25uZWN0IHBoYXNlICovCi0gICAgc3RhdGUoY29ubiwgU01UUF9TVE9QKTsKLSAgfQorICBlbHNlCisgICAgcmVzdWx0ID0gc210cF9hdXRoZW50aWNhdGUoY29ubik7CisKICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtMzU3LDcgKzUyMSw3IEBACiAgIGlmKHNtdHBjb2RlLzEwMCAhPSAyKSB7CiAgICAgZmFpbGYoZGF0YSwgIkFjY2VzcyBkZW5pZWQ6ICVkIiwgc210cGNvZGUpOwogICAgIHJlc3VsdCA9IENVUkxFX0xPR0lOX0RFTklFRDsKLSAgfSAKKyAgfQogICBlbHNlIHsKICAgICAvKiBlbmQgdGhlIGNvbm5lY3QgcGhhc2UgKi8KICAgICBzdGF0ZShjb25uLCBTTVRQX1NUT1ApOwpAQCAtMzY1LDYgKzUyOSwyMjMgQEAKICAgcmV0dXJuIHJlc3VsdDsKIH0KIAorLyogZm9yIEFVVEggUExBSU4gKHdpdGhvdXQgaW5pdGlhbCByZXNwb25zZSkgcmVzcG9uc2VzICovCitzdGF0aWMgQ1VSTGNvZGUgc210cF9zdGF0ZV9hdXRocGxhaW5fcmVzcChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc210cGNvZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbXRwc3RhdGUgaW5zdGF0ZSkKK3sKKyAgQ1VSTGNvZGUgcmVzdWx0ID0gQ1VSTEVfT0s7CisgIHN0cnVjdCBTZXNzaW9uSGFuZGxlICpkYXRhID0gY29ubi0+ZGF0YTsKKyAgc2l6ZV90IGw7CisgIGNoYXIgKiBwbGFpbmF1dGg7CisKKyAgKHZvaWQpaW5zdGF0ZTsgLyogbm8gdXNlIGZvciB0aGlzIHlldCAqLworCisgIGlmKHNtdHBjb2RlICE9IDMzNCkgeworICAgIGZhaWxmKGRhdGEsICJBY2Nlc3MgZGVuaWVkOiAlZCIsIHNtdHBjb2RlKTsKKyAgICByZXN1bHQgPSBDVVJMRV9MT0dJTl9ERU5JRUQ7CisgIH0KKyAgZWxzZSB7CisgICAgbCA9IHNtdHBfYXV0aF9wbGFpbl9kYXRhKGNvbm4sICZwbGFpbmF1dGgpOworCisgICAgaWYoIWwpCisgICAgICByZXN1bHQgPSBDVVJMRV9PVVRfT0ZfTUVNT1JZOworICAgIGVsc2UgeworICAgICAgcmVzdWx0ID0gQ3VybF9wcF9zZW5kZigmY29ubi0+cHJvdG8uc210cGMucHAsICIlcyIsIHBsYWluYXV0aCk7CisgICAgICBmcmVlKHBsYWluYXV0aCk7CisKKyAgICAgIGlmKCFyZXN1bHQpCisgICAgICAgIHN0YXRlKGNvbm4sIFNNVFBfQVVUSCk7CisgICAgfQorICB9CisKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworLyogZm9yIEFVVEggTE9HSU4gKHdpdGhvdXQgaW5pdGlhbCByZXNwb25zZSkgcmVzcG9uc2VzICovCitzdGF0aWMgQ1VSTGNvZGUgc210cF9zdGF0ZV9hdXRobG9naW5fcmVzcChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc210cGNvZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbXRwc3RhdGUgaW5zdGF0ZSkKK3sKKyAgQ1VSTGNvZGUgcmVzdWx0ID0gQ1VSTEVfT0s7CisgIHN0cnVjdCBTZXNzaW9uSGFuZGxlICpkYXRhID0gY29ubi0+ZGF0YTsKKyAgc2l6ZV90IGw7CisgIGNoYXIgKiBhdXRodXNlcjsKKworICAodm9pZClpbnN0YXRlOyAvKiBubyB1c2UgZm9yIHRoaXMgeWV0ICovCisKKyAgaWYoc210cGNvZGUgIT0gMzM0KSB7CisgICAgZmFpbGYoZGF0YSwgIkFjY2VzcyBkZW5pZWQ6ICVkIiwgc210cGNvZGUpOworICAgIHJlc3VsdCA9IENVUkxFX0xPR0lOX0RFTklFRDsKKyAgfQorICBlbHNlIHsKKyAgICBsID0gc210cF9hdXRoX2xvZ2luX3VzZXIoY29ubiwgJmF1dGh1c2VyKTsKKworICAgIGlmKCFsKQorICAgICAgcmVzdWx0ID0gQ1VSTEVfT1VUX09GX01FTU9SWTsKKyAgICBlbHNlIHsKKyAgICAgIHJlc3VsdCA9IEN1cmxfcHBfc2VuZGYoJmNvbm4tPnByb3RvLnNtdHBjLnBwLCAiJXMiLCBhdXRodXNlcik7CisgICAgICBmcmVlKGF1dGh1c2VyKTsKKworICAgICAgaWYoIXJlc3VsdCkKKyAgICAgICAgc3RhdGUoY29ubiwgU01UUF9BVVRIUEFTU1dEKTsKKyAgICB9CisgIH0KKworICByZXR1cm4gcmVzdWx0OworfQorCisvKiBmb3IgcmVzcG9uc2VzIHRvIHVzZXIgZW50cnkgb2YgQVVUSCBMT0dJTi4gKi8KK3N0YXRpYyBDVVJMY29kZSBzbXRwX3N0YXRlX2F1dGhwYXNzd2RfcmVzcChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNtdHBjb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNtdHBzdGF0ZSBpbnN0YXRlKQoreworICBDVVJMY29kZSByZXN1bHQgPSBDVVJMRV9PSzsKKyAgc3RydWN0IFNlc3Npb25IYW5kbGUgKmRhdGEgPSBjb25uLT5kYXRhOworICBzaXplX3QgcGxlbjsKKyAgc2l6ZV90IGw7CisgIGNoYXIgKmF1dGhwYXNzd2Q7CisKKyAgKHZvaWQpaW5zdGF0ZTsgLyogbm8gdXNlIGZvciB0aGlzIHlldCAqLworCisgIGlmKHNtdHBjb2RlICE9IDMzNCkgeworICAgIGZhaWxmKGRhdGEsICJBY2Nlc3MgZGVuaWVkOiAlZCIsIHNtdHBjb2RlKTsKKyAgICByZXN1bHQgPSBDVVJMRV9MT0dJTl9ERU5JRUQ7CisgIH0KKyAgZWxzZSB7CisgICAgcGxlbiA9IHN0cmxlbihjb25uLT5wYXNzd2QpOworCisgICAgaWYoIXBsZW4pCisgICAgICByZXN1bHQgPSBDdXJsX3BwX3NlbmRmKCZjb25uLT5wcm90by5zbXRwYy5wcCwgIj0iKTsKKyAgICBlbHNlIHsKKyAgICAgIGwgPSBDdXJsX2Jhc2U2NF9lbmNvZGUoZGF0YSwgY29ubi0+cGFzc3dkLCBwbGVuLCAmYXV0aHBhc3N3ZCk7CisKKyAgICAgIGlmKCFsKQorICAgICAgICByZXN1bHQgPSBDVVJMRV9PVVRfT0ZfTUVNT1JZOworICAgICAgZWxzZSB7CisgICAgICAgIHJlc3VsdCA9IEN1cmxfcHBfc2VuZGYoJmNvbm4tPnByb3RvLnNtdHBjLnBwLCAiJXMiLCBhdXRocGFzc3dkKTsKKyAgICAgICAgZnJlZShhdXRocGFzc3dkKTsKKworICAgICAgICBpZighcmVzdWx0KQorICAgICAgICAgIHN0YXRlKGNvbm4sIFNNVFBfQVVUSCk7CisgICAgICB9CisgICAgfQorICB9CisKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworI2lmbmRlZiBDVVJMX0RJU0FCTEVfQ1JZUFRPX0FVVEgKKworLyogZm9yIEFVVEggQ1JBTS1NRDUgcmVzcG9uc2VzLiAqLworc3RhdGljIENVUkxjb2RlIHNtdHBfc3RhdGVfYXV0aGNyYW1fcmVzcChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzbXRwY29kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc210cHN0YXRlIGluc3RhdGUpCit7CisgIENVUkxjb2RlIHJlc3VsdCA9IENVUkxFX09LOworICBzdHJ1Y3QgU2Vzc2lvbkhhbmRsZSAqZGF0YSA9IGNvbm4tPmRhdGE7CisgIGNoYXIgKiBjaGxnNjQgPSBkYXRhLT5zdGF0ZS5idWZmZXI7CisgIHVuc2lnbmVkIGNoYXIgKiBjaGxnOworICBzaXplX3QgY2hsZ2xlbjsKKyAgc2l6ZV90IGw7CisgIGNoYXIgKiBycGx5YjY0OworICBITUFDX2NvbnRleHQgKiBjdHh0OworICB1bnNpZ25lZCBjaGFyIGRpZ2VzdFsxNl07CisgIGNoYXIgcmVwbHlbTUFYX0NVUkxfVVNFUl9MRU5HVEggKyAzMiAvKiAyICogc2l6ZSBvZiBNRDUgZGlnZXN0ICovICsgMV07CisKKyAgKHZvaWQpaW5zdGF0ZTsgLyogbm8gdXNlIGZvciB0aGlzIHlldCAqLworCisgIGlmKHNtdHBjb2RlICE9IDMzNCkgeworICAgIGZhaWxmKGRhdGEsICJBY2Nlc3MgZGVuaWVkOiAlZCIsIHNtdHBjb2RlKTsKKyAgICByZXR1cm4gQ1VSTEVfTE9HSU5fREVOSUVEOworICB9CisKKyAgLyogR2V0IHRoZSBjaGFsbGVuZ2UuICovCisgIGZvciAoY2hsZzY0ICs9IDQ7ICpjaGxnNjQgPT0gJyAnIHx8ICpjaGxnNjQgPT0gJ1x0JzsgY2hsZzY0KyspCisgICAgOworCisgIGNobGcgPSAodW5zaWduZWQgY2hhciAqKSBOVUxMOworICBjaGxnbGVuID0gMDsKKworICBpZigqY2hsZzY0ICE9ICc9JykgeworICAgIGZvciAobCA9IHN0cmxlbihjaGxnNjQpOyBsLS07KQorICAgICAgaWYoY2hsZzY0W2xdICE9ICdccicgJiYgY2hsZzY0W2xdICE9ICdcbicgJiYgY2hsZzY0W2xdICE9ICcgJyAmJgorICAgICAgIGNobGc2NFtsXSAhPSAnXHQnKQorICAgICAgICBicmVhazsKKworICAgIGlmKCsrbCkgeworICAgICAgY2hsZzY0W2xdID0gJ1wwJzsKKworICAgICAgaWYoIShjaGxnbGVuID0gQ3VybF9iYXNlNjRfZGVjb2RlKGNobGc2NCwgJmNobGcpKSkKKyAgICAgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CisgICAgfQorICB9CisKKyAgLyogQ29tcHV0ZSBkaWdlc3QuICovCisgIGN0eHQgPSBDdXJsX0hNQUNfaW5pdChDdXJsX0hNQUNfTUQ1LAorICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikgY29ubi0+cGFzc3dkLAorICAgICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGludCkoc3RybGVuKGNvbm4tPnBhc3N3ZCkpKTsKKworICBpZighY3R4dCkgeworICAgIGlmKGNobGcpCisgICAgICBmcmVlKGNobGcpOworCisgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CisgIH0KKworICBpZihjaGxnbGVuID4gMCkKKyAgICBDdXJsX0hNQUNfdXBkYXRlKGN0eHQsIGNobGcsICh1bnNpZ25lZCBpbnQpKGNobGdsZW4pKTsKKworICBpZihjaGxnKQorICAgIGZyZWUoY2hsZyk7CisKKyAgQ3VybF9ITUFDX2ZpbmFsKGN0eHQsIGRpZ2VzdCk7CisKKyAgLyogUHJlcGFyZSB0aGUgcmVwbHkuICovCisgIHNucHJpbnRmKHJlcGx5LCBzaXplb2YgcmVwbHksCisgICAiJXMgJTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeCIsCisgICBjb25uLT51c2VyLCBkaWdlc3RbMF0sIGRpZ2VzdFsxXSwgZGlnZXN0WzJdLCBkaWdlc3RbM10sIGRpZ2VzdFs0XSwgZGlnZXN0WzVdLAorICAgZGlnZXN0WzZdLCBkaWdlc3RbN10sIGRpZ2VzdFs4XSwgZGlnZXN0WzldLCBkaWdlc3RbMTBdLCBkaWdlc3RbMTFdLAorICAgZGlnZXN0WzEyXSwgZGlnZXN0WzEzXSwgZGlnZXN0WzE0XSwgZGlnZXN0WzE1XSk7CisKKyAgLyogRW5jb2RlIGl0IHRvIGJhc2U2NCBhbmQgc2VuZCBpdC4gKi8KKyAgbCA9IEN1cmxfYmFzZTY0X2VuY29kZShkYXRhLCByZXBseSwgMCwgJnJwbHliNjQpOworCisgIGlmKCFsKQorICAgIHJlc3VsdCA9IENVUkxFX09VVF9PRl9NRU1PUlk7CisgIGVsc2UgeworICAgIHJlc3VsdCA9IEN1cmxfcHBfc2VuZGYoJmNvbm4tPnByb3RvLnNtdHBjLnBwLCAiJXMiLCBycGx5YjY0KTsKKyAgICBmcmVlKHJwbHliNjQpOworCisgICAgaWYoIXJlc3VsdCkKKyAgICAgIHN0YXRlKGNvbm4sIFNNVFBfQVVUSCk7CisgIH0KKworICByZXR1cm4gcmVzdWx0OworfQorCisjZW5kaWYKKworLyogZm9yIGZpbmFsIHJlc3BvbnNlcyB0byBBVVRIIHNlcXVlbmNlcy4gKi8KK3N0YXRpYyBDVVJMY29kZSBzbXRwX3N0YXRlX2F1dGhfcmVzcChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNtdHBjb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNtdHBzdGF0ZSBpbnN0YXRlKQoreworICBDVVJMY29kZSByZXN1bHQgPSBDVVJMRV9PSzsKKyAgc3RydWN0IFNlc3Npb25IYW5kbGUgKmRhdGEgPSBjb25uLT5kYXRhOworCisgICh2b2lkKWluc3RhdGU7IC8qIG5vIHVzZSBmb3IgdGhpcyB5ZXQgKi8KKworICBpZihzbXRwY29kZSAhPSAyMzUpIHsKKyAgICBmYWlsZihkYXRhLCAiQXV0aGVudGljYXRpb24gZmFpbGVkOiAlZCIsIHNtdHBjb2RlKTsKKyAgICByZXN1bHQgPSBDVVJMRV9MT0dJTl9ERU5JRUQ7CisgIH0KKyAgZWxzZQorICAgIHN0YXRlKGNvbm4sIFNNVFBfU1RPUCk7ICAgICAgICAgICAgIC8qIEVuZCBvZiBjb25uZWN0IHBoYXNlLiAqLworCisgIHJldHVybiByZXN1bHQ7Cit9CisKIC8qIHN0YXJ0IHRoZSBETyBwaGFzZSAqLwogc3RhdGljIENVUkxjb2RlIHNtdHBfbWFpbChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pCiB7CkBAIC00NTEsNyArODMyLDcgQEAKICAgICB9CiAKICAgICAvKiBzZW5kIERBVEEgKi8KLSAgICByZXN1bHQgPSBDdXJsX3BwX3NlbmRmKCZjb25uLT5wcm90by5zbXRwYy5wcCwgIkRBVEEiLCAiIik7CisgICAgcmVzdWx0ID0gQ3VybF9wcF9zZW5kZigmY29ubi0+cHJvdG8uc210cGMucHAsICJEQVRBIik7CiAgICAgaWYocmVzdWx0KQogICAgICAgcmV0dXJuIHJlc3VsdDsKIApAQCAtNDY1LDcgKzg0Niw2IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNtdHBjb2RlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNtdHBzdGF0ZSBpbnN0YXRlKQogewotICBDVVJMY29kZSByZXN1bHQgPSBDVVJMRV9PSzsKICAgc3RydWN0IFNlc3Npb25IYW5kbGUgKmRhdGEgPSBjb25uLT5kYXRhOwogICBzdHJ1Y3QgRlRQICpzbXRwID0gZGF0YS0+c3RhdGUucHJvdG8uc210cDsKIApAQCAtNDc3LDExICs4NTcsMTEgQEAKICAgfQogCiAgIC8qIFNNVFAgdXBsb2FkICovCi0gIHJlc3VsdCA9IEN1cmxfc2V0dXBfdHJhbnNmZXIoY29ubiwgLTEsIC0xLCBGQUxTRSwgTlVMTCwgLyogbm8gZG93bmxvYWQgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGSVJTVFNPQ0tFVCwgc210cC0+Ynl0ZWNvdW50cCk7CisgIEN1cmxfc2V0dXBfdHJhbnNmZXIoY29ubiwgLTEsIC0xLCBGQUxTRSwgTlVMTCwgLyogbm8gZG93bmxvYWQgKi8KKyAgICAgICAgICAgICAgICAgICAgICBGSVJTVFNPQ0tFVCwgc210cC0+Ynl0ZWNvdW50cCk7CiAKICAgc3RhdGUoY29ubiwgU01UUF9TVE9QKTsKLSAgcmV0dXJuIHJlc3VsdDsKKyAgcmV0dXJuIENVUkxFX09LOwogfQogCiAvKiBmb3IgdGhlIFBPU1REQVRBIHJlc3BvbnNlLCB3aGljaCBpcyByZWNlaXZlZCBhZnRlciB0aGUgZW50aXJlIERBVEEKQEAgLTU0Miw2ICs5MjIsMzIgQEAKICAgICAgIHJlc3VsdCA9IHNtdHBfc3RhdGVfaGVsb19yZXNwKGNvbm4sIHNtdHBjb2RlLCBzbXRwYy0+c3RhdGUpOwogICAgICAgYnJlYWs7CiAKKyAgICBjYXNlIFNNVFBfU1RBUlRUTFM6CisgICAgICByZXN1bHQgPSBzbXRwX3N0YXRlX3N0YXJ0dGxzX3Jlc3AoY29ubiwgc210cGNvZGUsIHNtdHBjLT5zdGF0ZSk7CisgICAgICBicmVhazsKKworICAgIGNhc2UgU01UUF9BVVRIUExBSU46CisgICAgICByZXN1bHQgPSBzbXRwX3N0YXRlX2F1dGhwbGFpbl9yZXNwKGNvbm4sIHNtdHBjb2RlLCBzbXRwYy0+c3RhdGUpOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNNVFBfQVVUSExPR0lOOgorICAgICAgcmVzdWx0ID0gc210cF9zdGF0ZV9hdXRobG9naW5fcmVzcChjb25uLCBzbXRwY29kZSwgc210cGMtPnN0YXRlKTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBTTVRQX0FVVEhQQVNTV0Q6CisgICAgICByZXN1bHQgPSBzbXRwX3N0YXRlX2F1dGhwYXNzd2RfcmVzcChjb25uLCBzbXRwY29kZSwgc210cGMtPnN0YXRlKTsKKyAgICAgIGJyZWFrOworCisjaWZuZGVmIENVUkxfRElTQUJMRV9DUllQVE9fQVVUSAorICAgIGNhc2UgU01UUF9BVVRIQ1JBTToKKyAgICAgIHJlc3VsdCA9IHNtdHBfc3RhdGVfYXV0aGNyYW1fcmVzcChjb25uLCBzbXRwY29kZSwgc210cGMtPnN0YXRlKTsKKyAgICAgIGJyZWFrOworI2VuZGlmCisKKyAgICBjYXNlIFNNVFBfQVVUSDoKKyAgICAgIHJlc3VsdCA9IHNtdHBfc3RhdGVfYXV0aF9yZXNwKGNvbm4sIHNtdHBjb2RlLCBzbXRwYy0+c3RhdGUpOworICAgICAgYnJlYWs7CisKICAgICBjYXNlIFNNVFBfTUFJTDoKICAgICAgIHJlc3VsdCA9IHNtdHBfc3RhdGVfbWFpbF9yZXNwKGNvbm4sIHNtdHBjb2RlLCBzbXRwYy0+c3RhdGUpOwogICAgICAgYnJlYWs7CkBAIC01NTAsMTAgKzk1Niw2IEBACiAgICAgICByZXN1bHQgPSBzbXRwX3N0YXRlX3JjcHRfcmVzcChjb25uLCBzbXRwY29kZSwgc210cGMtPnN0YXRlKTsKICAgICAgIGJyZWFrOwogCi0gICAgY2FzZSBTTVRQX1NUQVJUVExTOgotICAgICAgcmVzdWx0ID0gc210cF9zdGF0ZV9zdGFydHRsc19yZXNwKGNvbm4sIHNtdHBjb2RlLCBzbXRwYy0+c3RhdGUpOwotICAgICAgYnJlYWs7Ci0KICAgICBjYXNlIFNNVFBfREFUQToKICAgICAgIHJlc3VsdCA9IHNtdHBfc3RhdGVfZGF0YV9yZXNwKGNvbm4sIHNtdHBjb2RlLCBzbXRwYy0+c3RhdGUpOwogICAgICAgYnJlYWs7CkBAIC02NDQsMTAgKzEwNDYsNyBAQAogICBzdHJ1Y3QgcGluZ3BvbmcgKnBwPSZzbXRwYy0+cHA7CiAgIGNvbnN0IGNoYXIgKnBhdGggPSBjb25uLT5kYXRhLT5zdGF0ZS5wYXRoOwogICBpbnQgbGVuOwotCi0jaWZkZWYgSEFWRV9HRVRIT1NUTkFNRQotICAgIGNoYXIgbG9jYWxob3N0WzEwMjQgKyAxXTsKLSNlbmRpZgorICBjaGFyIGxvY2FsaG9zdFsxMDI0ICsgMV07CiAKICAgKmRvbmUgPSBGQUxTRTsgLyogZGVmYXVsdCB0byBub3QgZG9uZSB5ZXQgKi8KIApAQCAtNzEzLDE3ICsxMTEyLDE1IEBACiAgIHBwLT5jb25uID0gY29ubjsKIAogICBpZighKnBhdGgpIHsKLSNpZmRlZiBIQVZFX0dFVEhPU1ROQU1FCi0gICAgaWYoIWdldGhvc3RuYW1lKGxvY2FsaG9zdCwgc2l6ZW9mIGxvY2FsaG9zdCkpCisgICAgaWYoIUN1cmxfZ2V0aG9zdG5hbWUobG9jYWxob3N0LCBzaXplb2YgbG9jYWxob3N0KSkKICAgICAgIHBhdGggPSBsb2NhbGhvc3Q7CiAgICAgZWxzZQotI2VuZGlmCi0gICAgcGF0aCA9ICJsb2NhbGhvc3QiOworICAgICAgcGF0aCA9ICJsb2NhbGhvc3QiOwogICB9CiAKICAgLyogdXJsIGRlY29kZSB0aGUgcGF0aCBhbmQgdXNlIGl0IGFzIGRvbWFpbiB3aXRoIEVITE8gKi8KICAgc210cGMtPmRvbWFpbiA9IGN1cmxfZWFzeV91bmVzY2FwZShjb25uLT5kYXRhLCBwYXRoLCAwLCAmbGVuKTsKLSAgaWYgKCFzbXRwYy0+ZG9tYWluKQorICBpZighc210cGMtPmRvbWFpbikKICAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKIAogICAvKiBXaGVuIHdlIGNvbm5lY3QsIHdlIHN0YXJ0IGluIHRoZSBzdGF0ZSB3aGVyZSB3ZSBhd2FpdCB0aGUgc2VydmVyIGdyZWV0aW5nCkBAIC04OTQsNyArMTI5MSw3IEBACiB7CiAgIENVUkxjb2RlIHJlc3VsdCA9IENVUkxFX09LOwogCi0gIHJlc3VsdCA9IEN1cmxfcHBfc2VuZGYoJmNvbm4tPnByb3RvLnNtdHBjLnBwLCAiUVVJVCIsIE5VTEwpOworICByZXN1bHQgPSBDdXJsX3BwX3NlbmRmKCZjb25uLT5wcm90by5zbXRwYy5wcCwgIlFVSVQiKTsKICAgaWYocmVzdWx0KQogICAgIHJldHVybiByZXN1bHQ7CiAgIHN0YXRlKGNvbm4sIFNNVFBfUVVJVCk7CkBAIC05MjIsMTEgKzEzMTksMTUgQEAKIAogICAvKiBUaGUgU01UUCBzZXNzaW9uIG1heSBvciBtYXkgbm90IGhhdmUgYmVlbiBhbGxvY2F0ZWQvc2V0dXAgYXQgdGhpcwogICAgICBwb2ludCEgKi8KLSAgaWYgKHNtdHBjLT5wcC5jb25uKQorICBpZihzbXRwYy0+cHAuY29ubikKICAgICAodm9pZClzbXRwX3F1aXQoY29ubik7IC8qIGlnbm9yZSBlcnJvcnMgb24gdGhlIExPR09VVCAqLwogCiAgIEN1cmxfcHBfZGlzY29ubmVjdCgmc210cGMtPnBwKTsKIAorICAvKiBUaGlzIHdvbid0IGFscmVhZHkgYmUgZnJlZWQgaW4gc29tZSBlcnJvciBjYXNlcyAqLworICBDdXJsX3NhZmVmcmVlKHNtdHBjLT5kb21haW4pOworICBzbXRwYy0+ZG9tYWluID0gTlVMTDsKKwogICByZXR1cm4gQ1VSTEVfT0s7CiB9CiAKQEAgLTkzNCwxOCArMTMzNSwxOCBAQAogc3RhdGljIENVUkxjb2RlIHNtdHBfZG9waGFzZV9kb25lKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGNvbm5lY3RlZCkKIHsKLSAgQ1VSTGNvZGUgcmVzdWx0ID0gQ1VSTEVfT0s7CiAgIHN0cnVjdCBGVFAgKnNtdHAgPSBjb25uLT5kYXRhLT5zdGF0ZS5wcm90by5zbXRwOwogICBzdHJ1Y3Qgc210cF9jb25uICpzbXRwYz0gJmNvbm4tPnByb3RvLnNtdHBjOwogICAodm9pZCljb25uZWN0ZWQ7CiAKICAgaWYoc210cC0+dHJhbnNmZXIgIT0gRlRQVFJBTlNGRVJfQk9EWSkKICAgICAvKiBubyBkYXRhIHRvIHRyYW5zZmVyICovCi0gICAgcmVzdWx0PUN1cmxfc2V0dXBfdHJhbnNmZXIoY29ubiwgLTEsIC0xLCBGQUxTRSwgTlVMTCwgLTEsIE5VTEwpOworICAgIEN1cmxfc2V0dXBfdHJhbnNmZXIoY29ubiwgLTEsIC0xLCBGQUxTRSwgTlVMTCwgLTEsIE5VTEwpOwogCiAgIGZyZWUoc210cGMtPmRvbWFpbik7CisgIHNtdHBjLT5kb21haW4gPSBOVUxMOwogCi0gIHJldHVybiByZXN1bHQ7CisgIHJldHVybiBDVVJMRV9PSzsKIH0KIAogLyogY2FsbGVkIGZyb20gbXVsdGkuYyB3aGlsZSBET2luZyAqLwpkaWZmIC0tZ2l0IGEvbGliL3NtdHAuaCBiL2xpYi9zbXRwLmgKaW5kZXggNDcxNjMzOC4uNDE3ZmQ1MiAxMDA2NDQKLS0tIGEvbGliL3NtdHAuaAorKysgYi9saWIvc210cC5oCkBAIC0zNCw2ICszNCwxMSBAQAogICBTTVRQX0VITE8sCiAgIFNNVFBfSEVMTywKICAgU01UUF9TVEFSVFRMUywKKyAgU01UUF9BVVRIUExBSU4sCisgIFNNVFBfQVVUSExPR0lOLAorICBTTVRQX0FVVEhQQVNTV0QsCisgIFNNVFBfQVVUSENSQU0sCisgIFNNVFBfQVVUSCwKICAgU01UUF9NQUlMLCAvKiBNQUlMIEZST00gKi8KICAgU01UUF9SQ1BULCAvKiBSQ1BUIFRPICovCiAgIFNNVFBfREFUQSwKQEAgLTQ5LDEwICs1NCwxOSBAQAogICBjaGFyICpkb21haW47ICAgIC8qIHdoYXQgdG8gc2VuZCBpbiB0aGUgRUhMTyAqLwogICBzaXplX3QgZW9iOyAgICAgICAgIC8qIG51bWJlciBvZiBieXRlcyBvZiB0aGUgRU9CIChFbmQgT2YgQm9keSkgdGhhdCBoYXMgYmVlbgogICAgICAgICAgICAgICAgICAgICAgICAgIHJlY2VpdmVkIHRodXMgZmFyICovCisgIHVuc2lnbmVkIGludCBhdXRobWVjaHM7ICAgICAgIC8qIEFjY2VwdGVkIGF1dGhlbnRpY2F0aW9uIG1ldGhvZHMuICovCiAgIHNtdHBzdGF0ZSBzdGF0ZTsgLyogYWx3YXlzIHVzZSBzbXRwLmM6c3RhdGUoKSB0byBjaGFuZ2Ugc3RhdGUhICovCiAgIHN0cnVjdCBjdXJsX3NsaXN0ICpyY3B0OwogfTsKIAorLyogQXV0aGVudGljYXRpb24gbWVjaGFuaXNtIGZsYWdzLiAqLworI2RlZmluZSBTTVRQX0FVVEhfTE9HSU4gICAgICAgICAweDAwMDEKKyNkZWZpbmUgU01UUF9BVVRIX1BMQUlOICAgICAgICAgMHgwMDAyCisjZGVmaW5lIFNNVFBfQVVUSF9DUkFNX01ENSAgICAgIDB4MDAwNAorI2RlZmluZSBTTVRQX0FVVEhfRElHRVNUX01ENSAgICAweDAwMDgKKyNkZWZpbmUgU01UUF9BVVRIX0dTU0FQSSAgICAgICAgMHgwMDEwCisjZGVmaW5lIFNNVFBfQVVUSF9FWFRFUk5BTCAgICAgIDB4MDAyMAorCiBleHRlcm4gY29uc3Qgc3RydWN0IEN1cmxfaGFuZGxlciBDdXJsX2hhbmRsZXJfc210cDsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgQ3VybF9oYW5kbGVyIEN1cmxfaGFuZGxlcl9zbXRwczsKIApkaWZmIC0tZ2l0IGEvbGliL3NvY2tzLmMgYi9saWIvc29ja3MuYwppbmRleCBlYjc5NTY3Li43YjU3NDBiIDEwMDY0NAotLS0gYS9saWIvc29ja3MuYworKysgYi9saWIvc29ja3MuYwpAQCAtNzcsNyArNzcsNyBAQAogICAgIGNvbm50aW1lID0gQ3VybF90dmRpZmYodHZub3csIGNvbm4tPmNyZWF0ZWQpOwogICAgIGlmKGNvbm50aW1lID4gY29ubl90aW1lb3V0KSB7CiAgICAgICAvKiB3ZSBhbHJlYWR5IGdvdCB0aGUgdGltZW91dCAqLwotICAgICAgcmVzdWx0ID0gfkNVUkxFX09LOworICAgICAgcmVzdWx0ID0gQ1VSTEVfT1BFUkFUSU9OX1RJTUVET1VUOwogICAgICAgYnJlYWs7CiAgICAgfQogICAgIGlmKEN1cmxfc29ja2V0X3JlYWR5KHNvY2tmZCwgQ1VSTF9TT0NLRVRfQkFELApAQCAtODYsNyArODYsOSBAQAogICAgICAgYnJlYWs7CiAgICAgfQogICAgIHJlc3VsdCA9IEN1cmxfcmVhZF9wbGFpbihzb2NrZmQsIGJ1ZiwgYnVmZmVyc2l6ZSwgJm5yZWFkKTsKLSAgICBpZihyZXN1bHQpCisgICAgaWYoQ1VSTEVfQUdBSU4gPT0gcmVzdWx0KQorICAgICAgY29udGludWU7CisgICAgZWxzZSBpZihyZXN1bHQpCiAgICAgICBicmVhazsKIAogICAgIGlmKGJ1ZmZlcnNpemUgPT0gbnJlYWQpIHsKQEAgLTE3Miw4ICsxNzQsOCBAQAogICAgICAgcmV0dXJuIENVUkxFX0NPVUxETlRfUkVTT0xWRV9QUk9YWTsKIAogICAgIGlmKHJjID09IENVUkxSRVNPTFZfUEVORElORykKLSAgICAgIC8qIHRoaXMgcmVxdWlyZXMgdGhhdCB3ZSdyZSBpbiAid2FpdCBmb3IgcmVzb2x2ZSIgc3RhdGUgKi8KLSAgICAgIHJjID0gQ3VybF93YWl0X2Zvcl9yZXNvbHYoY29ubiwgJmRucyk7CisgICAgICAvKiBpZ25vcmVzIHRoZSByZXR1cm4gY29kZSwgYnV0ICdkbnMnIHJlbWFpbnMgTlVMTCBvbiBmYWlsdXJlICovCisgICAgICAodm9pZClDdXJsX3dhaXRfZm9yX3Jlc29sdihjb25uLCAmZG5zKTsKIAogICAgIC8qCiAgICAgICogV2UgY2Fubm90IHVzZSAnaG9zdGVudCcgYXMgYSBzdHJ1Y3QgdGhhdCBDdXJsX3Jlc29sdigpIHJldHVybnMuICBJdApAQCAtNTExLDExICs1MTMsMTMgQEAKICAgICAgKi8KICAgICBsZW4gPSAwOwogICAgIHNvY2tzcmVxW2xlbisrXSA9IDE7ICAgIC8qIHVzZXJuYW1lL3B3IHN1Ym5lZ290aWF0aW9uIHZlcnNpb24gKi8KLSAgICBzb2Nrc3JlcVtsZW4rK10gPSAoY2hhcikgdXNlcmxlbjsKLSAgICBtZW1jcHkoc29ja3NyZXEgKyBsZW4sIHByb3h5X25hbWUsIHVzZXJsZW4pOworICAgIHNvY2tzcmVxW2xlbisrXSA9ICh1bnNpZ25lZCBjaGFyKSB1c2VybGVuOworICAgIGlmKHByb3h5X25hbWUgJiYgdXNlcmxlbikKKyAgICAgIG1lbWNweShzb2Nrc3JlcSArIGxlbiwgcHJveHlfbmFtZSwgdXNlcmxlbik7CiAgICAgbGVuICs9IChpbnQpdXNlcmxlbjsKLSAgICBzb2Nrc3JlcVtsZW4rK10gPSAoY2hhcikgcHdsZW47Ci0gICAgbWVtY3B5KHNvY2tzcmVxICsgbGVuLCBwcm94eV9wYXNzd29yZCwgcHdsZW4pOworICAgIHNvY2tzcmVxW2xlbisrXSA9ICh1bnNpZ25lZCBjaGFyKSBwd2xlbjsKKyAgICBpZihwcm94eV9wYXNzd29yZCAmJiBwd2xlbikKKyAgICAgIG1lbWNweShzb2Nrc3JlcSArIGxlbiwgcHJveHlfcGFzc3dvcmQsIHB3bGVuKTsKICAgICBsZW4gKz0gKGludClwd2xlbjsKIAogICAgIGNvZGUgPSBDdXJsX3dyaXRlX3BsYWluKGNvbm4sIHNvY2ssIChjaGFyICopc29ja3NyZXEsIGxlbiwgJndyaXR0ZW4pOwpAQCAtNTk3LDkgKzYwMSwxMiBAQAogICAgIGlmKHJjID09IENVUkxSRVNPTFZfRVJST1IpCiAgICAgICByZXR1cm4gQ1VSTEVfQ09VTEROVF9SRVNPTFZFX0hPU1Q7CiAKLSAgICBpZihyYyA9PSBDVVJMUkVTT0xWX1BFTkRJTkcpCisgICAgaWYocmMgPT0gQ1VSTFJFU09MVl9QRU5ESU5HKSB7CiAgICAgICAvKiB0aGlzIHJlcXVpcmVzIHRoYXQgd2UncmUgaW4gIndhaXQgZm9yIHJlc29sdmUiIHN0YXRlICovCi0gICAgICByYyA9IEN1cmxfd2FpdF9mb3JfcmVzb2x2KGNvbm4sICZkbnMpOworICAgICAgY29kZSA9IEN1cmxfd2FpdF9mb3JfcmVzb2x2KGNvbm4sICZkbnMpOworICAgICAgaWYoY29kZSAhPSBDVVJMRV9PSykKKyAgICAgICAgcmV0dXJuIGNvZGU7CisgICAgfQogCiAgICAgLyoKICAgICAgKiBXZSBjYW5ub3QgdXNlICdob3N0ZW50JyBhcyBhIHN0cnVjdCB0aGF0IEN1cmxfcmVzb2x2KCkgcmV0dXJucy4gIEl0CmRpZmYgLS1naXQgYS9saWIvc3BsYXkuYyBiL2xpYi9zcGxheS5jCmluZGV4IGRiM2RiZWEuLmRjYzQyY2YgMTAwNjQ0Ci0tLSBhL2xpYi9zcGxheS5jCisrKyBiL2xpYi9zcGxheS5jCkBAIC0zOTQsNiArMzk0LDEwIEBACiAgIGZvciAoaSA9IDA7IGkgPCBNQVg7IGkrKykgewogICAgIHN0cnVjdCB0aW1ldmFsIGtleTsKICAgICBwdHJzW2ldID0gdCA9IG1hbGxvYyhzaXplb2Yoc3RydWN0IEN1cmxfdHJlZSkpOworICAgIGlmKCF0KSB7CisgICAgICBwdXRzKCJvdXQgb2YgbWVtb3J5ISIpOworICAgICAgcmV0dXJuIDA7CisgICAgfQogCiAgICAga2V5LnR2X3NlYyA9IDA7CiAjaWZkZWYgVEVTVDIKQEAgLTQwNSwxMCArNDA5LDYgQEAKICNlbmRpZgogCiAgICAgdC0+cGF5bG9hZCA9ICh2b2lkICopa2V5LnR2X3VzZWM7IC8qIGZvciBzaW1wbGljaXR5ICovCi0gICAgaWYoIXQpIHsKLSAgICAgIHB1dHMoIm91dCBvZiBtZW1vcnkhIik7Ci0gICAgICByZXR1cm4gMDsKLSAgICB9CiAgICAgcm9vdCA9IEN1cmxfc3BsYXlpbnNlcnQoa2V5LCByb290LCB0KTsKICAgfQogCmRpZmYgLS1naXQgYS9saWIvc3NoLmMgYi9saWIvc3NoLmMKaW5kZXggZmY1OTk0Yi4uMzE0ZDg5OCAxMDA2NDQKLS0tIGEvbGliL3NzaC5jCisrKyBiL2xpYi9zc2guYwpAQCAtNDg2LDYgKzQ4NiwxNyBAQAogI2VuZGlmCiAKIC8qCisgKiBFYXJsaWVyIGxpYnNzaDIgdmVyc2lvbnMgZGlkbid0IGRvIFNDUCBwcm9wZXJseSBiZXlvbmQgMzJiaXQgc2l6ZXMgb24gMzJiaXQKKyAqIGFyY2hpdGVjdHVyZXMgc28gd2UgY2hlY2sgb2YgdGhlIG5lY2Vzc2FyeSBmdW5jdGlvbiBpcyBwcmVzZW50LgorICovCisjaWZuZGVmIEhBVkVfTElCU1NIMl9TQ1BfU0VORDY0CisjZGVmaW5lIFNDUF9TRU5EKGEsYixjLGQpIGxpYnNzaDJfc2NwX3NlbmRfZXgoYSwgYiwgKGludCkoYyksIChzaXplX3QpZCwgMCwgMCkKKyNlbHNlCisjZGVmaW5lIFNDUF9TRU5EKGEsYixjLGQpIGxpYnNzaDJfc2NwX3NlbmQ2NChhLCBiLCAoaW50KShjKSwgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGlic3NoMl91aW50NjRfdClkLCAwLCAwKQorI2VuZGlmCisKKy8qCiAgKiBzc2hfc3RhdGVtYWNoX2FjdCgpIHJ1bnMgdGhlIFNTSCBzdGF0ZSBtYWNoaW5lIGFzIGZhciBhcyBpdCBjYW4gd2l0aG91dAogICogYmxvY2tpbmcgYW5kIHdpdGhvdXQgcmVhY2hpbmcgdGhlIGVuZC4gIFRoZSBkYXRhIHRoZSBwb2ludGVyICdibG9jaycgcG9pbnRzCiAgKiB0byB3aWxsIGJlIHNldCB0byBUUlVFIGlmIHRoZSBsaWJzc2gyIGZ1bmN0aW9uIHJldHVybnMgTElCU1NIMl9FUlJPUl9FQUdBSU4KQEAgLTE0MzEsNiArMTQ0MiwxMSBAQAogICAgICAgICAgICAgZGF0YS0+c3RhdGUucmVzdW1lX2Zyb20gPSAwOwogICAgICAgICAgIH0KICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGN1cmxfb2ZmX3Qgc2l6ZSA9IGF0dHJzLmZpbGVzaXplOworICAgICAgICAgICAgaWYoc2l6ZSA8IDApIHsKKyAgICAgICAgICAgICAgZmFpbGYoZGF0YSwgIkJhZCBmaWxlIHNpemUgKCUiIEZPUk1BVF9PRkZfVCAiKSIsIHNpemUpOworICAgICAgICAgICAgICByZXR1cm4gQ1VSTEVfQkFEX0RPV05MT0FEX1JFU1VNRTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIGRhdGEtPnN0YXRlLnJlc3VtZV9mcm9tID0gYXR0cnMuZmlsZXNpemU7CiAgICAgICAgICAgfQogICAgICAgICB9CkBAIC0xNTU2LDggKzE1NzIsNyBAQAogICAgICAgICBDdXJsX3BncnNTZXRVcGxvYWRTaXplKGRhdGEsIGRhdGEtPnNldC5pbmZpbGVzaXplKTsKICAgICAgIH0KICAgICAgIC8qIHVwbG9hZCBkYXRhICovCi0gICAgICByZXN1bHQgPSBDdXJsX3NldHVwX3RyYW5zZmVyKGNvbm4sIC0xLCAtMSwgRkFMU0UsIE5VTEwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZJUlNUU09DS0VULCBOVUxMKTsKKyAgICAgIEN1cmxfc2V0dXBfdHJhbnNmZXIoY29ubiwgLTEsIC0xLCBGQUxTRSwgTlVMTCwgRklSU1RTT0NLRVQsIE5VTEwpOwogCiAgICAgICAvKiBub3Qgc2V0IGJ5IEN1cmxfc2V0dXBfdHJhbnNmZXIgdG8gcHJlc2VydmUga2VlcG9uIGJpdHMgKi8KICAgICAgIGNvbm4tPnNvY2tmZCA9IGNvbm4tPndyaXRlc29ja2ZkOwpAQCAtMTg1MCw3ICsxODY1LDcgQEAKICAgICAgIHNzaGMtPnJlYWRkaXJfbG9uZ2VudHJ5ID0gTlVMTDsKIAogICAgICAgLyogbm8gZGF0YSB0byB0cmFuc2ZlciAqLwotICAgICAgcmVzdWx0ID0gQ3VybF9zZXR1cF90cmFuc2Zlcihjb25uLCAtMSwgLTEsIEZBTFNFLCBOVUxMLCAtMSwgTlVMTCk7CisgICAgICBDdXJsX3NldHVwX3RyYW5zZmVyKGNvbm4sIC0xLCAtMSwgRkFMU0UsIE5VTEwsIC0xLCBOVUxMKTsKICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TVE9QKTsKICAgICAgIGJyZWFrOwogCkBAIC0xOTAxLDE2ICsxOTE2LDE5IEBACiAgICAgICAgIGRhdGEtPnJlcS5tYXhkb3dubG9hZCA9IC0xOwogICAgICAgfQogICAgICAgZWxzZSB7Ci0gICAgICAgIGN1cmxfb2ZmX3Qgc2l6ZTsKKyAgICAgICAgY3VybF9vZmZfdCBzaXplID0gYXR0cnMuZmlsZXNpemU7CiAKLSAgICAgICAgc2l6ZSA9IGF0dHJzLmZpbGVzaXplOworICAgICAgICBpZihzaXplIDwgMCkgeworICAgICAgICAgIGZhaWxmKGRhdGEsICJCYWQgZmlsZSBzaXplICglIiBGT1JNQVRfT0ZGX1QgIikiLCBzaXplKTsKKyAgICAgICAgICByZXR1cm4gQ1VSTEVfQkFEX0RPV05MT0FEX1JFU1VNRTsKKyAgICAgICAgfQogICAgICAgICBpZihjb25uLT5kYXRhLT5zdGF0ZS51c2VfcmFuZ2UpIHsKICAgICAgICAgICBjdXJsX29mZl90IGZyb20sIHRvOwogICAgICAgICAgIGNoYXIgKnB0cjsKICAgICAgICAgICBjaGFyICpwdHIyOwogCiAgICAgICAgICAgZnJvbT1jdXJseF9zdHJ0b29mZnQoY29ubi0+ZGF0YS0+c3RhdGUucmFuZ2UsICZwdHIsIDApOwotICAgICAgICAgIHdoaWxlKHB0ciAmJiAqcHRyICYmIChpc3NwYWNlKChpbnQpKnB0cikgfHwgKCpwdHI9PSctJykpKQorICAgICAgICAgIHdoaWxlKCpwdHIgJiYgKGlzc3BhY2UoKGludCkqcHRyKSB8fCAoKnB0cj09Jy0nKSkpCiAgICAgICAgICAgICBwdHIrKzsKICAgICAgICAgICB0bz1jdXJseF9zdHJ0b29mZnQocHRyLCAmcHRyMiwgMCk7CiAgICAgICAgICAgaWYoKHB0ciA9PSBwdHIyKSAvKiBubyAidG8iIHZhbHVlIGdpdmVuICovCkBAIC0xOTc1LDE0ICsxOTkzLDE0IEBACiAgICAgLyogU2V0dXAgdGhlIGFjdHVhbCBkb3dubG9hZCAqLwogICAgIGlmKGRhdGEtPnJlcS5zaXplID09IDApIHsKICAgICAgIC8qIG5vIGRhdGEgdG8gdHJhbnNmZXIgKi8KLSAgICAgIHJlc3VsdCA9IEN1cmxfc2V0dXBfdHJhbnNmZXIoY29ubiwgLTEsIC0xLCBGQUxTRSwgTlVMTCwgLTEsIE5VTEwpOworICAgICAgQ3VybF9zZXR1cF90cmFuc2Zlcihjb25uLCAtMSwgLTEsIEZBTFNFLCBOVUxMLCAtMSwgTlVMTCk7CiAgICAgICBpbmZvZihkYXRhLCAiRmlsZSBhbHJlYWR5IGNvbXBsZXRlbHkgZG93bmxvYWRlZFxuIik7CiAgICAgICBzdGF0ZShjb25uLCBTU0hfU1RPUCk7CiAgICAgICBicmVhazsKICAgICB9CiAgICAgZWxzZSB7Ci0gICAgICByZXN1bHQgPSBDdXJsX3NldHVwX3RyYW5zZmVyKGNvbm4sIEZJUlNUU09DS0VULCBkYXRhLT5yZXEuc2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRkFMU0UsIE5VTEwsIC0xLCBOVUxMKTsKKyAgICAgIEN1cmxfc2V0dXBfdHJhbnNmZXIoY29ubiwgRklSU1RTT0NLRVQsIGRhdGEtPnJlcS5zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICBGQUxTRSwgTlVMTCwgLTEsIE5VTEwpOwogCiAgICAgICAvKiBub3Qgc2V0IGJ5IEN1cmxfc2V0dXBfdHJhbnNmZXIgdG8gcHJlc2VydmUga2VlcG9uIGJpdHMgKi8KICAgICAgIGNvbm4tPndyaXRlc29ja2ZkID0gY29ubi0+c29ja2ZkOwpAQCAtMjA4NCw5ICsyMTAyLDggQEAKICAgICAgICAqIGRpcmVjdG9yeSBpbiB0aGUgcGF0aC4KICAgICAgICAqLwogICAgICAgc3NoYy0+c3NoX2NoYW5uZWwgPQotICAgICAgICBsaWJzc2gyX3NjcF9zZW5kX2V4KHNzaGMtPnNzaF9zZXNzaW9uLCBzZnRwX3NjcC0+cGF0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KShkYXRhLT5zZXQubmV3X2ZpbGVfcGVybXMpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzaXplX3QpZGF0YS0+c2V0LmluZmlsZXNpemUsIDAsIDApOworICAgICAgICBTQ1BfU0VORChzc2hjLT5zc2hfc2Vzc2lvbiwgc2Z0cF9zY3AtPnBhdGgsIGRhdGEtPnNldC5uZXdfZmlsZV9wZXJtcywKKyAgICAgICAgICAgICAgICAgZGF0YS0+c2V0LmluZmlsZXNpemUpOwogICAgICAgaWYoIXNzaGMtPnNzaF9jaGFubmVsKSB7CiAgICAgICAgIGlmKGxpYnNzaDJfc2Vzc2lvbl9sYXN0X2Vycm5vKHNzaGMtPnNzaF9zZXNzaW9uKSA9PQogICAgICAgICAgICBMSUJTU0gyX0VSUk9SX0VBR0FJTikgewpAQCAtMjEwNyw4ICsyMTI0LDggQEAKICAgICAgIH0KIAogICAgICAgLyogdXBsb2FkIGRhdGEgKi8KLSAgICAgIHJlc3VsdCA9IEN1cmxfc2V0dXBfdHJhbnNmZXIoY29ubiwgLTEsIGRhdGEtPnJlcS5zaXplLCBGQUxTRSwgTlVMTCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRklSU1RTT0NLRVQsIE5VTEwpOworICAgICAgQ3VybF9zZXR1cF90cmFuc2Zlcihjb25uLCAtMSwgZGF0YS0+cmVxLnNpemUsIEZBTFNFLCBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICBGSVJTVFNPQ0tFVCwgTlVMTCk7CiAKICAgICAgIC8qIG5vdCBzZXQgYnkgQ3VybF9zZXR1cF90cmFuc2ZlciB0byBwcmVzZXJ2ZSBrZWVwb24gYml0cyAqLwogICAgICAgY29ubi0+c29ja2ZkID0gY29ubi0+d3JpdGVzb2NrZmQ7CkBAIC0yMTU5LDggKzIxNzYsNyBAQAogICAgICAgLyogZG93bmxvYWQgZGF0YSAqLwogICAgICAgYnl0ZWNvdW50ID0gKGN1cmxfb2ZmX3Qpc2Iuc3Rfc2l6ZTsKICAgICAgIGRhdGEtPnJlcS5tYXhkb3dubG9hZCA9ICAoY3VybF9vZmZfdClzYi5zdF9zaXplOwotICAgICAgcmVzdWx0ID0gQ3VybF9zZXR1cF90cmFuc2Zlcihjb25uLCBGSVJTVFNPQ0tFVCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZWNvdW50LCBGQUxTRSwgTlVMTCwgLTEsIE5VTEwpOworICAgICAgQ3VybF9zZXR1cF90cmFuc2Zlcihjb25uLCBGSVJTVFNPQ0tFVCwgYnl0ZWNvdW50LCBGQUxTRSwgTlVMTCwgLTEsIE5VTEwpOwogCiAgICAgICAvKiBub3Qgc2V0IGJ5IEN1cmxfc2V0dXBfdHJhbnNmZXIgdG8gcHJlc2VydmUga2VlcG9uIGJpdHMgKi8KICAgICAgIGNvbm4tPndyaXRlc29ja2ZkID0gY29ubi0+c29ja2ZkOwpAQCAtMjQxMCwxNSArMjQyNiwyOCBAQAogICByZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0aWMgQ1VSTGNvZGUgc3NoX2Vhc3lfc3RhdGVtYWNoKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubikKK3N0YXRpYyBDVVJMY29kZSBzc2hfZWFzeV9zdGF0ZW1hY2goc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGR1cmluZ2Nvbm5lY3QpCiB7CiAgIHN0cnVjdCBzc2hfY29ubiAqc3NoYyA9ICZjb25uLT5wcm90by5zc2hjOwogICBDVVJMY29kZSByZXN1bHQgPSBDVVJMRV9PSzsKKyAgc3RydWN0IFNlc3Npb25IYW5kbGUgKmRhdGEgPSBjb25uLT5kYXRhOwogCiAgIHdoaWxlKChzc2hjLT5zdGF0ZSAhPSBTU0hfU1RPUCkgJiYgIXJlc3VsdCkgewogICAgIGJvb2wgYmxvY2s7CisgICAgbG9uZyBsZWZ0OworCiAgICAgcmVzdWx0ID0gc3NoX3N0YXRlbWFjaF9hY3QoY29ubiwgJmJsb2NrKTsKIAorICAgIGlmKEN1cmxfcGdyc1VwZGF0ZShjb25uKSkKKyAgICAgIHJldHVybiBDVVJMRV9BQk9SVEVEX0JZX0NBTExCQUNLOworCisgICAgbGVmdCA9IEN1cmxfdGltZWxlZnQoY29ubiwgTlVMTCwgZHVyaW5nY29ubmVjdCk7CisgICAgaWYobGVmdCA8IDApIHsKKyAgICAgIGZhaWxmKGRhdGEsICJPcGVyYXRpb24gdGltZWQgb3V0XG4iKTsKKyAgICAgIHJldHVybiBDVVJMRV9PUEVSQVRJT05fVElNRURPVVQ7CisgICAgfQorCiAjaWZkZWYgSEFWRV9MSUJTU0gyX1NFU1NJT05fQkxPQ0tfRElSRUNUSU9OCiAgICAgaWYoKENVUkxFX09LID09IHJlc3VsdCkgJiYgYmxvY2spIHsKICAgICAgIGludCBkaXIgPSBsaWJzc2gyX3Nlc3Npb25fYmxvY2tfZGlyZWN0aW9ucyhzc2hjLT5zc2hfc2Vzc2lvbik7CkBAIC0yNDMyLDcgKzI0NjEsOCBAQAogICAgICAgICBmZF93cml0ZSA9IHNvY2s7CiAgICAgICB9CiAgICAgICAvKiB3YWl0IGZvciB0aGUgc29ja2V0IHRvIGJlY29tZSByZWFkeSAqLwotICAgICAgQ3VybF9zb2NrZXRfcmVhZHkoZmRfcmVhZCwgZmRfd3JpdGUsIDEwMDApOyAvKiBpZ25vcmUgcmVzdWx0ICovCisgICAgICBDdXJsX3NvY2tldF9yZWFkeShmZF9yZWFkLCBmZF93cml0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpKGxlZnQ+MTAwMD8xMDAwOmxlZnQpKTsgLyogaWdub3JlIHJlc3VsdCAqLwogICAgIH0KICNlbmRpZgogCkBAIC0yNDY2LDYgKzI0OTYsOSBAQAogICByZXR1cm4gQ1VSTEVfT0s7CiB9CiAKK3N0YXRpYyBDdXJsX3JlY3Ygc2NwX3JlY3YsIHNmdHBfcmVjdjsKK3N0YXRpYyBDdXJsX3NlbmQgc2NwX3NlbmQsIHNmdHBfc2VuZDsKKwogLyoKICAqIEN1cmxfc3NoX2Nvbm5lY3QoKSBnZXRzIGNhbGxlZCBmcm9tIEN1cmxfcHJvdG9jb2xfY29ubmVjdCgpIHRvIGFsbG93IHVzIHRvCiAgKiBkbyBwcm90b2NvbC1zcGVjaWZpYyBhY3Rpb25zIGF0IGNvbm5lY3QtdGltZS4KQEAgLTI0OTEsNiArMjUyNCwxMyBAQAogICBpZihyZXN1bHQpCiAgICAgcmV0dXJuIHJlc3VsdDsKIAorICBpZihjb25uLT5wcm90b2NvbCAmIFBST1RfU0NQKSB7CisgICAgY29ubi0+cmVjdltGSVJTVFNPQ0tFVF0gPSBzY3BfcmVjdjsKKyAgICBjb25uLT5zZW5kW0ZJUlNUU09DS0VUXSA9IHNjcF9zZW5kOworICB9IGVsc2UgeworICAgIGNvbm4tPnJlY3ZbRklSU1RTT0NLRVRdID0gc2Z0cF9yZWN2OworICAgIGNvbm4tPnNlbmRbRklSU1RTT0NLRVRdID0gc2Z0cF9zZW5kOworICB9CiAgIHNzaCA9ICZjb25uLT5wcm90by5zc2hjOwogCiAjaWZkZWYgQ1VSTF9MSUJTU0gyX0RFQlVHCkBAIC0yNTQwLDcgKzI1ODAsNyBAQAogICBpZihkYXRhLT5zdGF0ZS51c2VkX2ludGVyZmFjZSA9PSBDdXJsX2lmX211bHRpKQogICAgIHJlc3VsdCA9IHNzaF9tdWx0aV9zdGF0ZW1hY2goY29ubiwgZG9uZSk7CiAgIGVsc2UgewotICAgIHJlc3VsdCA9IHNzaF9lYXN5X3N0YXRlbWFjaChjb25uKTsKKyAgICByZXN1bHQgPSBzc2hfZWFzeV9zdGF0ZW1hY2goY29ubiwgVFJVRSk7CiAgICAgaWYoIXJlc3VsdCkKICAgICAgICpkb25lID0gVFJVRTsKICAgfQpAQCAtMjU3Niw3ICsyNjE2LDcgQEAKICAgICByZXN1bHQgPSBzc2hfbXVsdGlfc3RhdGVtYWNoKGNvbm4sIGRvcGhhc2VfZG9uZSk7CiAgIH0KICAgZWxzZSB7Ci0gICAgcmVzdWx0ID0gc3NoX2Vhc3lfc3RhdGVtYWNoKGNvbm4pOworICAgIHJlc3VsdCA9IHNzaF9lYXN5X3N0YXRlbWFjaChjb25uLCBGQUxTRSk7CiAgICAgKmRvcGhhc2VfZG9uZSA9IFRSVUU7IC8qIHdpdGggdGhlIGVhc3kgaW50ZXJmYWNlIHdlIGFyZSBkb25lIGhlcmUgKi8KICAgfQogICAqY29ubmVjdGVkID0gY29ubi0+Yml0cy50Y3Bjb25uZWN0OwpAQCAtMjY1Nyw3ICsyNjk3LDcgQEAKIAogICAgIHN0YXRlKGNvbm4sIFNTSF9TRVNTSU9OX0RJU0NPTk5FQ1QpOwogCi0gICAgcmVzdWx0ID0gc3NoX2Vhc3lfc3RhdGVtYWNoKGNvbm4pOworICAgIHJlc3VsdCA9IHNzaF9lYXN5X3N0YXRlbWFjaChjb25uLCBGQUxTRSk7CiAgIH0KIAogICByZXR1cm4gcmVzdWx0OwpAQCAtMjY3OCw3ICsyNzE4LDcgQEAKICAgICAgICBub24tYmxvY2tpbmcgRE9ORSBvcGVyYXRpb25zLCBub3QgaW4gdGhlIG11bHRpIHN0YXRlIG1hY2hpbmUgYW5kIHdpdGgKICAgICAgICBDdXJsX2RvbmUoKSBpbnZva2VzIG9uIHNldmVyYWwgcGxhY2VzIGluIHRoZSBjb2RlIQogICAgICovCi0gICAgcmVzdWx0ID0gc3NoX2Vhc3lfc3RhdGVtYWNoKGNvbm4pOworICAgIHJlc3VsdCA9IHNzaF9lYXN5X3N0YXRlbWFjaChjb25uLCBGQUxTRSk7CiAgIH0KICAgZWxzZQogICAgIHJlc3VsdCA9IHN0YXR1czsKQEAgLTI3MDUsOCArMjc0NSw4IEBACiB9CiAKIC8qIHJldHVybiBudW1iZXIgb2YgcmVjZWl2ZWQgKGRlY3J5cHRlZCkgYnl0ZXMgKi8KLXNzaXplX3QgQ3VybF9zY3Bfc2VuZChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGludCBzb2NraW5kZXgsCi0gICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqbWVtLCBzaXplX3QgbGVuKQorc3RhdGljIHNzaXplX3Qgc2NwX3NlbmQoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBpbnQgc29ja2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqbWVtLCBzaXplX3QgbGVuLCBDVVJMY29kZSAqZXJyKQogewogICBzc2l6ZV90IG53cml0ZTsKICAgKHZvaWQpc29ja2luZGV4OyAvKiB3ZSBvbmx5IHN1cHBvcnQgU0NQIG9uIHRoZSBmaXhlZCBrbm93biBwcmltYXJ5IHNvY2tldCAqLwpAQCAtMjcxNyw4ICsyNzU3LDEwIEBACiAKICAgc3NoX2Jsb2NrMndhaXRmb3IoY29ubiwgKG53cml0ZSA9PSBMSUJTU0gyX0VSUk9SX0VBR0FJTik/VFJVRTpGQUxTRSk7CiAKLSAgaWYobndyaXRlID09IExJQlNTSDJfRVJST1JfRUFHQUlOKQotICAgIHJldHVybiAwOworICBpZihud3JpdGUgPT0gTElCU1NIMl9FUlJPUl9FQUdBSU4pIHsKKyAgICAqZXJyID0gQ1VSTEVfQUdBSU47CisgICAgbndyaXRlID0gMDsKKyAgfQogCiAgIHJldHVybiBud3JpdGU7CiB9CkBAIC0yNzI3LDggKzI3NjksOCBAQAogICogSWYgdGhlIHJlYWQgd291bGQgYmxvY2sgKEVXT1VMREJMT0NLKSB3ZSByZXR1cm4gLTEuIE90aGVyd2lzZSB3ZSByZXR1cm4KICAqIGEgcmVndWxhciBDVVJMY29kZSB2YWx1ZS4KICAqLwotc3NpemVfdCBDdXJsX3NjcF9yZWN2KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgaW50IHNvY2tpbmRleCwKLSAgICAgICAgICAgICAgICAgICAgICBjaGFyICptZW0sIHNpemVfdCBsZW4pCitzdGF0aWMgc3NpemVfdCBzY3BfcmVjdihzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGludCBzb2NraW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICptZW0sIHNpemVfdCBsZW4sIENVUkxjb2RlICplcnIpCiB7CiAgIHNzaXplX3QgbnJlYWQ7CiAgICh2b2lkKXNvY2tpbmRleDsgLyogd2Ugb25seSBzdXBwb3J0IFNDUCBvbiB0aGUgZml4ZWQga25vd24gcHJpbWFyeSBzb2NrZXQgKi8KQEAgLTI3MzgsNiArMjc4MCwxMCBAQAogICAgIGxpYnNzaDJfY2hhbm5lbF9yZWFkKGNvbm4tPnByb3RvLnNzaGMuc3NoX2NoYW5uZWwsIG1lbSwgbGVuKTsKIAogICBzc2hfYmxvY2syd2FpdGZvcihjb25uLCAobnJlYWQgPT0gTElCU1NIMl9FUlJPUl9FQUdBSU4pP1RSVUU6RkFMU0UpOworICBpZiAobnJlYWQgPT0gTElCU1NIMl9FUlJPUl9FQUdBSU4pIHsKKyAgICAqZXJyID0gQ1VSTEVfQUdBSU47CisgICAgbnJlYWQgPSAtMTsKKyAgfQogCiAgIHJldHVybiBucmVhZDsKIH0KQEAgLTI3NzQsNyArMjgyMCw3IEBACiAgICAgcmVzdWx0ID0gc3NoX211bHRpX3N0YXRlbWFjaChjb25uLCBkb3BoYXNlX2RvbmUpOwogICB9CiAgIGVsc2UgewotICAgIHJlc3VsdCA9IHNzaF9lYXN5X3N0YXRlbWFjaChjb25uKTsKKyAgICByZXN1bHQgPSBzc2hfZWFzeV9zdGF0ZW1hY2goY29ubiwgRkFMU0UpOwogICAgICpkb3BoYXNlX2RvbmUgPSBUUlVFOyAvKiB3aXRoIHRoZSBlYXN5IGludGVyZmFjZSB3ZSBhcmUgZG9uZSBoZXJlICovCiAgIH0KICAgKmNvbm5lY3RlZCA9IGNvbm4tPmJpdHMudGNwY29ubmVjdDsKQEAgLTI4MTQsNyArMjg2MCw3IEBACiAgIGlmKGNvbm4tPnByb3RvLnNzaGMuc3NoX3Nlc3Npb24pIHsKICAgICAvKiBvbmx5IGlmIHRoZXJlJ3MgYSBzZXNzaW9uIHN0aWxsIGFyb3VuZCB0byB1c2UhICovCiAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfU0hVVERPV04pOwotICAgIHJlc3VsdCA9IHNzaF9lYXN5X3N0YXRlbWFjaChjb25uKTsKKyAgICByZXN1bHQgPSBzc2hfZWFzeV9zdGF0ZW1hY2goY29ubiwgRkFMU0UpOwogICB9CiAKICAgREVCVUdGKGluZm9mKGNvbm4tPmRhdGEsICJTU0ggRElTQ09OTkVDVCBpcyBkb25lXG4iKSk7CkBAIC0yODQyLDggKzI4ODgsOCBAQAogfQogCiAvKiByZXR1cm4gbnVtYmVyIG9mIHNlbnQgYnl0ZXMgKi8KLXNzaXplX3QgQ3VybF9zZnRwX3NlbmQoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBpbnQgc29ja2luZGV4LAotICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICptZW0sIHNpemVfdCBsZW4pCitzdGF0aWMgc3NpemVfdCBzZnRwX3NlbmQoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBpbnQgc29ja2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKm1lbSwgc2l6ZV90IGxlbiwgQ1VSTGNvZGUgKmVycikKIHsKICAgc3NpemVfdCBud3JpdGU7ICAgLyogbGlic3NoMl9zZnRwX3dyaXRlKCkgdXNlZCB0byByZXR1cm4gc2l6ZV90IGluIDAuMTQKICAgICAgICAgICAgICAgICAgICAgICAgYnV0IGlzIGNoYW5nZWQgdG8gc3NpemVfdCBpbiAwLjE1LiBUaGVzZSBkYXlzIHdlIGRvbid0CkBAIC0yODU0LDggKzI5MDAsMTAgQEAKIAogICBzc2hfYmxvY2syd2FpdGZvcihjb25uLCAobndyaXRlID09IExJQlNTSDJfRVJST1JfRUFHQUlOKT9UUlVFOkZBTFNFKTsKIAotICBpZihud3JpdGUgPT0gTElCU1NIMl9FUlJPUl9FQUdBSU4pCi0gICAgcmV0dXJuIDA7CisgIGlmKG53cml0ZSA9PSBMSUJTU0gyX0VSUk9SX0VBR0FJTikgeworICAgICplcnIgPSBDVVJMRV9BR0FJTjsKKyAgICBud3JpdGUgPSAwOworICB9CiAKICAgcmV0dXJuIG53cml0ZTsKIH0KQEAgLTI4NjMsOCArMjkxMSw4IEBACiAvKgogICogUmV0dXJuIG51bWJlciBvZiByZWNlaXZlZCAoZGVjcnlwdGVkKSBieXRlcwogICovCi1zc2l6ZV90IEN1cmxfc2Z0cF9yZWN2KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgaW50IHNvY2tpbmRleCwKLSAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqbWVtLCBzaXplX3QgbGVuKQorc3RhdGljIHNzaXplX3Qgc2Z0cF9yZWN2KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgaW50IHNvY2tpbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICptZW0sIHNpemVfdCBsZW4sIENVUkxjb2RlICplcnIpCiB7CiAgIHNzaXplX3QgbnJlYWQ7CiAgICh2b2lkKXNvY2tpbmRleDsKQEAgLTI4NzMsNiArMjkyMSwxMCBAQAogCiAgIHNzaF9ibG9jazJ3YWl0Zm9yKGNvbm4sIChucmVhZCA9PSBMSUJTU0gyX0VSUk9SX0VBR0FJTik/VFJVRTpGQUxTRSk7CiAKKyAgaWYobnJlYWQgPT0gTElCU1NIMl9FUlJPUl9FQUdBSU4pIHsKKyAgICAqZXJyID0gQ1VSTEVfQUdBSU47CisgICAgbnJlYWQgPSAtMTsKKyAgfQogICByZXR1cm4gbnJlYWQ7CiB9CiAKZGlmZiAtLWdpdCBhL2xpYi9zc2guaCBiL2xpYi9zc2guaAppbmRleCA0ZTI2OGMyLi40MDYyMjBjIDEwMDY0NAotLS0gYS9saWIvc3NoLmgKKysrIGIvbGliL3NzaC5oCkBAIC03LDcgKzcsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKLSAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMDksIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDEwLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCkBAIC0xNTEsMzcgKzE1MSwyMSBAQAogI2VuZGlmCiAKICNpZiBkZWZpbmVkKExJQlNTSDJfVkVSU0lPTl9OVU0pICYmIChMSUJTU0gyX1ZFUlNJT05fTlVNID49IDB4MDEwMDAwKQotLyogbGlic3NoMl9zZnRwX3NlZWs2NCgpIGhhcyBvbmx5IGV2ZXIgYmVlbiBwcm92aWRlZCBieSBsaWJzc2gyIDEuMCBvcgotICAgbGF0ZXIgKi8KICMgIGRlZmluZSBIQVZFX0xJQlNTSDJfU0ZUUF9TRUVLNjQgMQogI2Vsc2UKICMgIHVuZGVmIEhBVkVfTElCU1NIMl9TRlRQX1NFRUs2NAogI2VuZGlmCiAKKyNpZiBkZWZpbmVkKExJQlNTSDJfVkVSU0lPTl9OVU0pICYmIChMSUJTU0gyX1ZFUlNJT05fTlVNID49IDB4MDEwMjA2KQorIyAgZGVmaW5lIEhBVkVfTElCU1NIMl9TQ1BfU0VORDY0IDEKKyNlbHNlCisjICB1bmRlZiBIQVZFX0xJQlNTSDJfU0NQX1NFTkQ2NAorI2VuZGlmCisKIAogZXh0ZXJuIGNvbnN0IHN0cnVjdCBDdXJsX2hhbmRsZXIgQ3VybF9oYW5kbGVyX3NjcDsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgQ3VybF9oYW5kbGVyIEN1cmxfaGFuZGxlcl9zZnRwOwogCi1zc2l6ZV90IEN1cmxfc2NwX3NlbmQoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBpbnQgc29ja2luZGV4LAotICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKm1lbSwgc2l6ZV90IGxlbik7Ci1zc2l6ZV90IEN1cmxfc2NwX3JlY3Yoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBpbnQgc29ja2luZGV4LAotICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKm1lbSwgc2l6ZV90IGxlbik7Ci0KLXNzaXplX3QgQ3VybF9zZnRwX3NlbmQoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBpbnQgc29ja2luZGV4LAotICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICptZW0sIHNpemVfdCBsZW4pOwotc3NpemVfdCBDdXJsX3NmdHBfcmVjdihzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGludCBzb2NraW5kZXgsCi0gICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKm1lbSwgc2l6ZV90IGxlbik7Ci0KLSNkZWZpbmUgQ3VybF9zc2hfZW5hYmxlZChjb25uLHByb3QpIChjb25uLT5wcm90b2NvbCAmIHByb3QpCi0KLSNlbHNlIC8qIFVTRV9MSUJTU0gyICovCi0KLSNkZWZpbmUgQ3VybF9zc2hfZW5hYmxlZCh4LHkpIDAKLSNkZWZpbmUgQ3VybF9zY3Bfc2VuZChhLGIsYyxkKSAwCi0jZGVmaW5lIEN1cmxfc2Z0cF9zZW5kKGEsYixjLGQpIDAKLSNkZWZpbmUgQ3VybF9zY3BfcmVjdihhLGIsYyxkKSAwCi0jZGVmaW5lIEN1cmxfc2Z0cF9yZWN2KGEsYixjLGQpIDAKLQogI2VuZGlmIC8qIFVTRV9MSUJTU0gyICovCiAKICNlbmRpZiAvKiBIRUFERVJfQ1VSTF9TU0hfSCAqLwpkaWZmIC0tZ2l0IGEvbGliL3NzbGdlbi5jIGIvbGliL3NzbGdlbi5jCmluZGV4IGRmMmE0MDcuLmJkOGRjMTcgMTAwNjQ0Ci0tLSBhL2xpYi9zc2xnZW4uYworKysgYi9saWIvc3NsZ2VuLmMKQEAgLTMxLDYgKzMxLDcgQEAKICAgIEN1cmxfb3NzbF8gLSBwcmVmaXggZm9yIE9wZW5TU0wgb25lcwogICAgQ3VybF9ndGxzXyAtIHByZWZpeCBmb3IgR251VExTIG9uZXMKICAgIEN1cmxfbnNzXyAtIHByZWZpeCBmb3IgTlNTIG9uZXMKKyAgIEN1cmxfcG9sYXJzc2xfIC0gcHJlZml4IGZvciBQb2xhclNTTCBvbmVzCiAKICAgIE5vdGUgdGhhdCB0aGlzIHNvdXJjZSBjb2RlIHVzZXMgY3VybHNzbF8qIGZ1bmN0aW9ucywgYW5kIHRoZXkgYXJlIGFsbAogICAgZGVmaW5lcy9tYWNyb3MgI2RlZmluZWQgYnkgdGhlIGxpYi1zcGVjaWZpYyBoZWFkZXIgZmlsZXMuCkBAIC01NSw2ICs1Niw3IEBACiAjaW5jbHVkZSAiZ3Rscy5oIiAgIC8qIEdudVRMUyB2ZXJzaW9ucyAqLwogI2luY2x1ZGUgIm5zc2cuaCIgICAvKiBOU1MgdmVyc2lvbnMgKi8KICNpbmNsdWRlICJxc3NsLmgiICAgLyogUVNPU1NMIHZlcnNpb25zICovCisjaW5jbHVkZSAicG9sYXJzc2wuaCIgLyogUG9sYXJTU0wgdmVyc2lvbnMgKi8KICNpbmNsdWRlICJzZW5kZi5oIgogI2luY2x1ZGUgInJhd3N0ci5oIgogI2luY2x1ZGUgInVybC5oIgpAQCAtNDA4LDI1ICs0MTAsNiBAQAogICByZXR1cm4gY3VybHNzbF9lbmdpbmVzX2xpc3QoZGF0YSk7CiB9CiAKLXNzaXplX3QgQ3VybF9zc2xfc2VuZChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCi0gICAgICAgICAgICAgICAgICAgICAgaW50IHNvY2tpbmRleCwKLSAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICptZW0sCi0gICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGxlbiwKLSAgICAgICAgICAgICAgICAgICAgICBpbnQgKmN1cmxjb2RlKQotewotICByZXR1cm4gY3VybHNzbF9zZW5kKGNvbm4sIHNvY2tpbmRleCwgbWVtLCBsZW4sIGN1cmxjb2RlKTsKLX0KLQotc3NpemVfdCBDdXJsX3NzbF9yZWN2KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKLSAgICAgICAgICAgICAgICAgICAgICBpbnQgc29ja2luZGV4LAotICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKm1lbSwKLSAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbGVuLAotICAgICAgICAgICAgICAgICAgICAgIGludCAqY3VybGNvZGUpCi17Ci0gIHJldHVybiBjdXJsc3NsX3JlY3YoY29ubiwgc29ja2luZGV4LCBtZW0sIGxlbiwgY3VybGNvZGUpOwotfQotCi0KIC8qCiAgKiBUaGlzIHNldHMgdXAgYSBzZXNzaW9uIElEIGNhY2hlIHRvIHRoZSBzcGVjaWZpZWQgc2l6ZS4gTWFrZSBzdXJlIHRoaXMgY29kZQogICogaXMgYWdub3N0aWMgdG8gd2hhdCB1bmRlcmx5aW5nIFNTTCB0ZWNobm9sb2d5IHdlIHVzZS4KZGlmZiAtLWdpdCBhL2xpYi9zc2xnZW4uaCBiL2xpYi9zc2xnZW4uaAppbmRleCBjNTYyNjVlLi45OTdlMzBkIDEwMDY0NAotLS0gYS9saWIvc3NsZ2VuLmgKKysrIGIvbGliL3NzbGdlbi5oCkBAIC00NSwyOCArNDUsNiBAQAogQ1VSTGNvZGUgQ3VybF9zc2xfc2V0X2VuZ2luZV9kZWZhdWx0KHN0cnVjdCBTZXNzaW9uSGFuZGxlICpkYXRhKTsKIHN0cnVjdCBjdXJsX3NsaXN0ICpDdXJsX3NzbF9lbmdpbmVzX2xpc3Qoc3RydWN0IFNlc3Npb25IYW5kbGUgKmRhdGEpOwogCi0vKiBJZiB0aGUgd3JpdGUgd291bGQgYmxvY2sgKEVXT1VMREJMT0NLKSBvciBmYWlsLCB3ZSB3ZSByZXR1cm4gLTEuCi0gKiBUaGUgZXJyb3Igb3IgLTEgKGZvciBFV09VTERCTE9DSykgaXMgdGhlbiBzdG9yZWQgaW4gKmN1cmxjb2RlLgotICogT3RoZXJ3aXNlIHdlIHJldHVybiB0aGUgY291bnQgb2YgKG5vbi1TU0wpIGJ5dGVzIHRyYW5zZmVyZWQuCi0gKi8KLXNzaXplX3QgQ3VybF9zc2xfc2VuZChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIC8qIGNvbm5lY3Rpb24gZGF0YSAqLwotICAgICAgICAgICAgICAgICAgICAgIGludCBzb2NraW5kZXgsICAgICAgICAgICAgLyogc29ja2V0aW5kZXggKi8KLSAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICptZW0sICAgICAgICAgIC8qIGRhdGEgdG8gd3JpdGUgKi8KLSAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbGVuLCAgICAgICAgICAgICAgIC8qIG1heCBhbW91bnQgdG8gd3JpdGUgKi8KLSAgICAgICAgICAgICAgICAgICAgICBpbnQgKmN1cmxjb2RlKTsgICAgICAgICAgIC8qIGVycm9yIHRvIHJldHVybiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xIG1lYW5zIEVXT1VMREJMT0NLICovCi0KLS8qIElmIHRoZSByZWFkIHdvdWxkIGJsb2NrIChFV09VTERCTE9DSykgb3IgZmFpbCwgd2Ugd2UgcmV0dXJuIC0xLgotICogVGhlIGVycm9yIG9yIC0xIChmb3IgRVdPVUxEQkxPQ0spIGlzIHRoZW4gc3RvcmVkIGluICpjdXJsY29kZS4KLSAqIE90aGVyd2lzZSB3ZSByZXR1cm4gdGhlIGNvdW50IG9mIChub24tU1NMKSBieXRlcyB0cmFuc2ZlcmVkLgotICovCi1zc2l6ZV90IEN1cmxfc3NsX3JlY3Yoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCAvKiBjb25uZWN0aW9uIGRhdGEgKi8KLSAgICAgICAgICAgICAgICAgICAgICBpbnQgc29ja2luZGV4LCAgICAgICAgICAgIC8qIHNvY2tldGluZGV4ICovCi0gICAgICAgICAgICAgICAgICAgICAgY2hhciAqbWVtLCAgICAgICAgICAgICAgICAvKiBzdG9yZSByZWFkIGRhdGEgaGVyZSAqLwotICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBsZW4sICAgICAgICAgICAgICAgLyogbWF4IGFtb3VudCB0byByZWFkICovCi0gICAgICAgICAgICAgICAgICAgICAgaW50ICpjdXJsY29kZSk7ICAgICAgICAgICAvKiBlcnJvciB0byByZXR1cm4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMSBtZWFucyBFV09VTERCTE9DSyAqLwotCiAvKiBpbml0IHRoZSBTU0wgc2Vzc2lvbiBJRCBjYWNoZSAqLwogQ1VSTGNvZGUgQ3VybF9zc2xfaW5pdHNlc3Npb25zKHN0cnVjdCBTZXNzaW9uSGFuZGxlICosIGxvbmcpOwogc2l6ZV90IEN1cmxfc3NsX3ZlcnNpb24oY2hhciAqYnVmZmVyLCBzaXplX3Qgc2l6ZSk7CmRpZmYgLS1naXQgYS9saWIvc3NsdXNlLmMgYi9saWIvc3NsdXNlLmMKaW5kZXggZDljZjM4Mi4uNDc0YmM5YSAxMDA2NDQKLS0tIGEvbGliL3NzbHVzZS5jCisrKyBiL2xpYi9zc2x1c2UuYwpAQCAtNjQsNiArNjQsNyBAQAogI2luY2x1ZGUgPG9wZW5zc2wveDUwOXYzLmg+CiAjaW5jbHVkZSA8b3BlbnNzbC9kc2EuaD4KICNpbmNsdWRlIDxvcGVuc3NsL2RoLmg+CisjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KICNlbHNlCiAjaW5jbHVkZSA8cmFuZC5oPgogI2luY2x1ZGUgPHg1MDl2My5oPgpAQCAtODgyLDYgKzg4Myw4IEBACiAgICAgICBpbnQgd2hhdCA9IEN1cmxfc29ja2V0X3JlYWR5KGNvbm4tPnNvY2tbc29ja2luZGV4XSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1VSTF9TT0NLRVRfQkFELCBTU0xfU0hVVERPV05fVElNRU9VVCk7CiAgICAgICBpZih3aGF0ID4gMCkgeworICAgICAgICBFUlJfY2xlYXJfZXJyb3IoKTsKKwogICAgICAgICAvKiBTb21ldGhpbmcgdG8gcmVhZCwgbGV0J3MgZG8gaXQgYW5kIGhvcGUgdGhhdCBpdCBpcyB0aGUgY2xvc2UKICAgICAgICAgICAgbm90aWZ5IGFsZXJ0IGZyb20gdGhlIHNlcnZlciAqLwogICAgICAgICBucmVhZCA9IChzc2l6ZV90KVNTTF9yZWFkKGNvbm4tPnNzbFtzb2NraW5kZXhdLmhhbmRsZSwgYnVmLApAQCAtMTU5MiwxMCArMTU5NSw4IEBACiAgICAgaWYgKCAhbG9va3VwIHx8CiAgICAgICAgICAoIVg1MDlfbG9hZF9jcmxfZmlsZShsb29rdXAsZGF0YS0+c2V0LnN0cltTVFJJTkdfU1NMX0NSTEZJTEVdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWDUwOV9GSUxFVFlQRV9QRU0pKSApIHsKLSAgICAgIGZhaWxmKGRhdGEsImVycm9yIGxvYWRpbmcgQ1JMIGZpbGUgOlxuIgotICAgICAgICAgICAgIiAgQ1JMZmlsZTogJXNcbiIsCi0gICAgICAgICAgICBkYXRhLT5zZXQuc3RyW1NUUklOR19TU0xfQ1JMRklMRV0/Ci0gICAgICAgICAgICBkYXRhLT5zZXQuc3RyW1NUUklOR19TU0xfQ1JMRklMRV06ICJub25lIik7CisgICAgICBmYWlsZihkYXRhLCJlcnJvciBsb2FkaW5nIENSTCBmaWxlOiAlc1xuIiwKKyAgICAgICAgICAgIGRhdGEtPnNldC5zdHJbU1RSSU5HX1NTTF9DUkxGSUxFXSk7CiAgICAgICByZXR1cm4gQ1VSTEVfU1NMX0NSTF9CQURGSUxFOwogICAgIH0KICAgICBlbHNlIHsKQEAgLTE2ODQsNiArMTY4NSw4IEBACiAgICAgICAgICAgICAgfHwgc3NsX2Nvbm5lY3RfMl9yZWFkaW5nID09IGNvbm5zc2wtPmNvbm5lY3Rpbmdfc3RhdGUKICAgICAgICAgICAgICB8fCBzc2xfY29ubmVjdF8yX3dyaXRpbmcgPT0gY29ubnNzbC0+Y29ubmVjdGluZ19zdGF0ZSk7CiAKKyAgRVJSX2NsZWFyX2Vycm9yKCk7CisKICAgZXJyID0gU1NMX2Nvbm5lY3QoY29ubnNzbC0+aGFuZGxlKTsKIAogICAvKiAxICBpcyBmaW5lCkBAIC0yMzUyLDYgKzIzNTUsOSBAQAogICByZXR1cm4gcmV0Y29kZTsKIH0KIAorc3RhdGljIEN1cmxfcmVjdiBvc3NsX3JlY3Y7CitzdGF0aWMgQ3VybF9zZW5kIG9zc2xfc2VuZDsKKwogc3RhdGljIENVUkxjb2RlCiBvc3NsX2Nvbm5lY3RfY29tbW9uKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKICAgICAgICAgICAgICAgICAgICAgaW50IHNvY2tpbmRleCwKQEAgLTI0MjIsOCArMjQyOCwxNyBAQAogICAgICAgLyogc29ja2V0IGlzIHJlYWRhYmxlIG9yIHdyaXRhYmxlICovCiAgICAgfQogCisgICAgLyogUnVuIHRyYW5zYWN0aW9uLCBhbmQgcmV0dXJuIHRvIHRoZSBjYWxsZXIgaWYgaXQgZmFpbGVkIG9yIGlmIHRoaXMKKyAgICAgKiBjb25uZWN0aW9uIGlzIGRvbmUgbm9uYmxvY2tpbmcgYW5kIHRoaXMgbG9vcCB3b3VsZCBleGVjdXRlIGFnYWluLiBUaGlzCisgICAgICogcGVybWl0cyB0aGUgb3duZXIgb2YgYSBtdWx0aSBoYW5kbGUgdG8gYWJvcnQgYSBjb25uZWN0aW9uIGF0dGVtcHQKKyAgICAgKiBiZWZvcmUgc3RlcDIgaGFzIGNvbXBsZXRlZCB3aGlsZSBlbnN1cmluZyB0aGF0IGEgY2xpZW50IHVzaW5nIHNlbGVjdCgpCisgICAgICogb3IgZXBvbGwoKSB3aWxsIGFsd2F5cyBoYXZlIGEgdmFsaWQgZmRzZXQgdG8gd2FpdCBvbi4KKyAgICAgKi8KICAgICByZXRjb2RlID0gb3NzbF9jb25uZWN0X3N0ZXAyKGNvbm4sIHNvY2tpbmRleCk7Ci0gICAgaWYocmV0Y29kZSB8fCAoZGF0YS0+c3RhdGUudXNlZF9pbnRlcmZhY2UgPT0gQ3VybF9pZl9tdWx0aSkpCisgICAgaWYocmV0Y29kZSB8fCAobm9uYmxvY2tpbmcgJiYKKyAgICAgICAgICAgICAgICAgICAoc3NsX2Nvbm5lY3RfMiA9PSBjb25uc3NsLT5jb25uZWN0aW5nX3N0YXRlIHx8CisgICAgICAgICAgICAgICAgICAgIHNzbF9jb25uZWN0XzJfcmVhZGluZyA9PSBjb25uc3NsLT5jb25uZWN0aW5nX3N0YXRlIHx8CisgICAgICAgICAgICAgICAgICAgIHNzbF9jb25uZWN0XzJfd3JpdGluZyA9PSBjb25uc3NsLT5jb25uZWN0aW5nX3N0YXRlKSkpCiAgICAgICByZXR1cm4gcmV0Y29kZTsKIAogICB9IC8qIHJlcGVhdCBzdGVwMiB1bnRpbCBhbGwgdHJhbnNhY3Rpb25zIGFyZSBkb25lLiAqLwpAQCAtMjQzNyw2ICsyNDUyLDggQEAKIAogICBpZihzc2xfY29ubmVjdF9kb25lPT1jb25uc3NsLT5jb25uZWN0aW5nX3N0YXRlKSB7CiAgICAgY29ubnNzbC0+c3RhdGUgPSBzc2xfY29ubmVjdGlvbl9jb21wbGV0ZTsKKyAgICBjb25uLT5yZWN2W3NvY2tpbmRleF0gPSBvc3NsX3JlY3Y7CisgICAgY29ubi0+c2VuZFtzb2NraW5kZXhdID0gb3NzbF9zZW5kOwogICAgICpkb25lID0gVFJVRTsKICAgfQogICBlbHNlCkBAIC0yNDgyLDEyICsyNDk5LDExIEBACiAgICAgcmV0dXJuIEZBTFNFOwogfQogCi0vKiBmb3IgZG9jdW1lbnRhdGlvbiBzZWUgQ3VybF9zc2xfc2VuZCgpIGluIHNzbGdlbi5oICovCi1zc2l6ZV90IEN1cmxfb3NzbF9zZW5kKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKLSAgICAgICAgICAgICAgICAgICAgICAgaW50IHNvY2tpbmRleCwKLSAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqbWVtLAotICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbGVuLAotICAgICAgICAgICAgICAgICAgICAgICBpbnQgKmN1cmxjb2RlKQorc3RhdGljIHNzaXplX3Qgb3NzbF9zZW5kKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc29ja2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKm1lbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgIENVUkxjb2RlICpjdXJsY29kZSkKIHsKICAgLyogU1NMX3dyaXRlKCkgaXMgc2FpZCB0byByZXR1cm4gJ2ludCcgd2hpbGUgd3JpdGUoKSBhbmQgc2VuZCgpIHJldHVybnMKICAgICAgJ3NpemVfdCcgKi8KQEAgLTI0OTgsNiArMjUxNCw4IEBACiAgIGludCBtZW1sZW47CiAgIGludCByYzsKIAorICBFUlJfY2xlYXJfZXJyb3IoKTsKKwogICBtZW1sZW4gPSAobGVuID4gKHNpemVfdClJTlRfTUFYKSA/IElOVF9NQVggOiAoaW50KWxlbjsKICAgcmMgPSBTU0xfd3JpdGUoY29ubi0+c3NsW3NvY2tpbmRleF0uaGFuZGxlLCBtZW0sIG1lbWxlbik7CiAKQEAgLTI1MTAsNyArMjUyOCw3IEBACiAgICAgICAvKiBUaGUgb3BlcmF0aW9uIGRpZCBub3QgY29tcGxldGU7IHRoZSBzYW1lIFRMUy9TU0wgSS9PIGZ1bmN0aW9uCiAgICAgICAgICBzaG91bGQgYmUgY2FsbGVkIGFnYWluIGxhdGVyLiBUaGlzIGlzIGJhc2ljbHkgYW4gRVdPVUxEQkxPQ0sKICAgICAgICAgIGVxdWl2YWxlbnQuICovCi0gICAgICAqY3VybGNvZGUgPSAvKiBFV09VTERCTE9DSyAqLyAtMTsKKyAgICAgICpjdXJsY29kZSA9IENVUkxFX0FHQUlOOwogICAgICAgcmV0dXJuIC0xOwogICAgIGNhc2UgU1NMX0VSUk9SX1NZU0NBTEw6CiAgICAgICBmYWlsZihjb25uLT5kYXRhLCAiU1NMX3dyaXRlKCkgcmV0dXJuZWQgU1lTQ0FMTCwgZXJybm8gPSAlZCIsCkBAIC0yNTM0LDEyICsyNTUyLDExIEBACiAgIHJldHVybiAoc3NpemVfdClyYzsgLyogbnVtYmVyIG9mIGJ5dGVzICovCiB9CiAKLS8qIGZvciBkb2N1bWVudGF0aW9uIHNlZSBDdXJsX3NzbF9yZWN2KCkgaW4gc3NsZ2VuLmggKi8KLXNzaXplX3QgQ3VybF9vc3NsX3JlY3Yoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCAvKiBjb25uZWN0aW9uIGRhdGEgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgaW50IG51bSwgICAgICAgICAgICAgICAgICAvKiBzb2NrZXRpbmRleCAqLwotICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpidWYsICAgICAgICAgICAgICAgIC8qIHN0b3JlIHJlYWQgZGF0YSBoZXJlICovCi0gICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBidWZmZXJzaXplLCAgICAgICAgLyogbWF4IGFtb3VudCB0byByZWFkICovCi0gICAgICAgICAgICAgICAgICAgICAgIGludCAqY3VybGNvZGUpCitzdGF0aWMgc3NpemVfdCBvc3NsX3JlY3Yoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCAvKiBjb25uZWN0aW9uIGRhdGEgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbnVtLCAgICAgICAgICAgICAgICAgIC8qIHNvY2tldGluZGV4ICovCisgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqYnVmLCAgICAgICAgICAgICAgICAvKiBzdG9yZSByZWFkIGRhdGEgaGVyZSAqLworICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBidWZmZXJzaXplLCAgICAgICAgLyogbWF4IGFtb3VudCB0byByZWFkICovCisgICAgICAgICAgICAgICAgICAgICAgICAgQ1VSTGNvZGUgKmN1cmxjb2RlKQogewogICBjaGFyIGVycm9yX2J1ZmZlclsxMjBdOyAvKiBPcGVuU1NMIGRvY3VtZW50cyB0aGF0IHRoaXMgbXVzdCBiZSBhdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZWFzdCAxMjAgYnl0ZXMgbG9uZy4gKi8KQEAgLTI1NDcsNiArMjU2NCw4IEBACiAgIHNzaXplX3QgbnJlYWQ7CiAgIGludCBidWZmc2l6ZTsKIAorICBFUlJfY2xlYXJfZXJyb3IoKTsKKwogICBidWZmc2l6ZSA9IChidWZmZXJzaXplID4gKHNpemVfdClJTlRfTUFYKSA/IElOVF9NQVggOiAoaW50KWJ1ZmZlcnNpemU7CiAgIG5yZWFkID0gKHNzaXplX3QpU1NMX3JlYWQoY29ubi0+c3NsW251bV0uaGFuZGxlLCBidWYsIGJ1ZmZzaXplKTsKICAgaWYobnJlYWQgPCAwKSB7CkBAIC0yNTYwLDcgKzI1NzksNyBAQAogICAgIGNhc2UgU1NMX0VSUk9SX1dBTlRfUkVBRDoKICAgICBjYXNlIFNTTF9FUlJPUl9XQU5UX1dSSVRFOgogICAgICAgLyogdGhlcmUncyBkYXRhIHBlbmRpbmcsIHJlLWludm9rZSBTU0xfcmVhZCgpICovCi0gICAgICAqY3VybGNvZGUgPSAtMTsgIC8qIEVXT1VMREJMT0NLICovCisgICAgICAqY3VybGNvZGUgPSBDVVJMRV9BR0FJTjsKICAgICAgIHJldHVybiAtMTsKICAgICBkZWZhdWx0OgogICAgICAgLyogb3BlbnNzbC9zc2wuaCBzYXlzICJsb29rIGF0IGVycm9yIHN0YWNrL3JldHVybiB2YWx1ZS9lcnJubyIgKi8KZGlmZiAtLWdpdCBhL2xpYi9zc2x1c2UuaCBiL2xpYi9zc2x1c2UuaAppbmRleCAwMDM1N2FmLi4yYWMwYWQyIDEwMDY0NAotLS0gYS9saWIvc3NsdXNlLmgKKysrIGIvbGliL3NzbHVzZS5oCkBAIC01NiwyMCArNTYsNiBAQAogaW50IEN1cmxfb3NzbF9pbml0KHZvaWQpOwogdm9pZCBDdXJsX29zc2xfY2xlYW51cCh2b2lkKTsKIAotLyogZm9yIGRvY3VtZW50YXRpb24gc2VlIEN1cmxfc3NsX3NlbmQoKSBpbiBzc2xnZW4uaCAqLwotc3NpemVfdCBDdXJsX29zc2xfc2VuZChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCi0gICAgICAgICAgICAgICAgICAgICAgIGludCBzb2NraW5kZXgsCi0gICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKm1lbSwKLSAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgaW50ICpjdXJsY29kZSk7Ci0KLS8qIGZvciBkb2N1bWVudGF0aW9uIHNlZSBDdXJsX3NzbF9yZWN2KCkgaW4gc3NsZ2VuLmggKi8KLXNzaXplX3QgQ3VybF9vc3NsX3JlY3Yoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCAvKiBjb25uZWN0aW9uIGRhdGEgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgaW50IG51bSwgICAgICAgICAgICAgICAgICAvKiBzb2NrZXRpbmRleCAqLwotICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpidWYsICAgICAgICAgICAgICAgIC8qIHN0b3JlIHJlYWQgZGF0YSBoZXJlICovCi0gICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBidWZmZXJzaXplLCAgICAgICAgLyogbWF4IGFtb3VudCB0byByZWFkICovCi0gICAgICAgICAgICAgICAgICAgICAgIGludCAqY3VybGNvZGUpOwotCiBzaXplX3QgQ3VybF9vc3NsX3ZlcnNpb24oY2hhciAqYnVmZmVyLCBzaXplX3Qgc2l6ZSk7CiBpbnQgQ3VybF9vc3NsX2NoZWNrX2N4bihzdHJ1Y3QgY29ubmVjdGRhdGEgKmN4bik7CiBpbnQgQ3VybF9vc3NsX3NlZWQoc3RydWN0IFNlc3Npb25IYW5kbGUgKmRhdGEpOwpAQCAtOTAsOCArNzYsNiBAQAogI2RlZmluZSBjdXJsc3NsX3NldF9lbmdpbmUoeCx5KSBDdXJsX29zc2xfc2V0X2VuZ2luZSh4LHkpCiAjZGVmaW5lIGN1cmxzc2xfc2V0X2VuZ2luZV9kZWZhdWx0KHgpIEN1cmxfb3NzbF9zZXRfZW5naW5lX2RlZmF1bHQoeCkKICNkZWZpbmUgY3VybHNzbF9lbmdpbmVzX2xpc3QoeCkgQ3VybF9vc3NsX2VuZ2luZXNfbGlzdCh4KQotI2RlZmluZSBjdXJsc3NsX3NlbmQgQ3VybF9vc3NsX3NlbmQKLSNkZWZpbmUgY3VybHNzbF9yZWN2IEN1cmxfb3NzbF9yZWN2CiAjZGVmaW5lIGN1cmxzc2xfdmVyc2lvbiBDdXJsX29zc2xfdmVyc2lvbgogI2RlZmluZSBjdXJsc3NsX2NoZWNrX2N4biBDdXJsX29zc2xfY2hlY2tfY3huCiAjZGVmaW5lIGN1cmxzc2xfZGF0YV9wZW5kaW5nKHgseSkgQ3VybF9vc3NsX2RhdGFfcGVuZGluZyh4LHkpCmRpZmYgLS1naXQgYS9saWIvc3RhbXAtaDEgYi9saWIvc3RhbXAtaDEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhmNWFkYjYuLjAwMDAwMDAKLS0tIGEvbGliL3N0YW1wLWgxCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotdGltZXN0YW1wIGZvciBsaWIvY3VybF9jb25maWcuaApkaWZmIC0tZ2l0IGEvbGliL3N0cmVycm9yLmMgYi9saWIvc3RyZXJyb3IuYwppbmRleCA2NzNlODljLi5lOGVjZWE1IDEwMDY0NAotLS0gYS9saWIvc3RyZXJyb3IuYworKysgYi9saWIvc3RyZXJyb3IuYwpAQCAtMjc1LDYgKzI3NSwxMiBAQAogICBjYXNlIENVUkxFX1JUU1BfU0VTU0lPTl9FUlJPUjoKICAgICByZXR1cm4gIlJUU1Agc2Vzc2lvbiBlcnJvciI7CiAKKyAgY2FzZSBDVVJMRV9GVFBfQkFEX0ZJTEVfTElTVDoKKyAgICByZXR1cm4gIlVuYWJsZSB0byBwYXJzZSBGVFAgZmlsZSBsaXN0IjsKKworICBjYXNlIENVUkxFX0NIVU5LX0ZBSUxFRDoKKyAgICByZXR1cm4gIkNodW5rIGNhbGxiYWNrIGZhaWxlZCI7CisKICAgICAvKiBlcnJvciBjb2RlcyBub3QgdXNlZCBieSBjdXJyZW50IGxpYmN1cmwgKi8KICAgY2FzZSBDVVJMRV9PQlNPTEVURTQ6CiAgIGNhc2UgQ1VSTEVfT0JTT0xFVEUxMDoKZGlmZiAtLWdpdCBhL2xpYi9zdHJ0b29mZnQuYyBiL2xpYi9zdHJ0b29mZnQuYwppbmRleCBmNzVlYjhhLi42MWZmMDViIDEwMDY0NAotLS0gYS9saWIvc3RydG9vZmZ0LmMKKysrIGIvbGliL3N0cnRvb2ZmdC5jCkBAIC0xMzEsOSArMTMxLDkgQEAKICAgfQogICBlbHNlIHsKICAgICBpZihpc19uZWdhdGl2ZSkKLSAgICAgIHZhbHVlID0gQ1VSTF9MTE9OR19NSU47CisgICAgICB2YWx1ZSA9IENVUkxfT0ZGX1RfTUlOOwogICAgIGVsc2UKLSAgICAgIHZhbHVlID0gQ1VSTF9MTE9OR19NQVg7CisgICAgICB2YWx1ZSA9IENVUkxfT0ZGX1RfTUFYOwogCiAgICAgU0VUX0VSUk5PKEVSQU5HRSk7CiAgIH0KZGlmZiAtLWdpdCBhL2xpYi9zdHJ0b29mZnQuaCBiL2xpYi9zdHJ0b29mZnQuaAppbmRleCBiZjI3YTE3Li44MjA4ZTg3IDEwMDY0NAotLS0gYS9saWIvc3RydG9vZmZ0LmgKKysrIGIvbGliL3N0cnRvb2ZmdC5oCkBAIC01Nyw3ICs1NywxMiBAQAogIyAgZGVmaW5lIGN1cmx4X3N0cnRvb2ZmdCBzdHJ0b2wKICNlbmRpZgogCi0jZGVmaW5lIENVUkxfTExPTkdfTUFYIENVUkxfT0ZGX1RfQygweDdGRkZGRkZGRkZGRkZGRkYpCi0jZGVmaW5lIENVUkxfTExPTkdfTUlOICgtQ1VSTF9MTE9OR19NQVggLSBDVVJMX09GRl9UX0MoMSkpCisjaWYgKENVUkxfU0laRU9GX0NVUkxfT0ZGX1QgPT0gNCkKKyMgIGRlZmluZSBDVVJMX09GRl9UX01BWCBDVVJMX09GRl9UX0MoMHg3RkZGRkZGRikKKyNlbHNlCisgICAvKiBhc3N1bWUgQ1VSTF9TSVpFT0ZfQ1VSTF9PRkZfVCA9PSA4ICovCisjICBkZWZpbmUgQ1VSTF9PRkZfVF9NQVggQ1VSTF9PRkZfVF9DKDB4N0ZGRkZGRkZGRkZGRkZGRikKKyNlbmRpZgorI2RlZmluZSBDVVJMX09GRl9UX01JTiAoLUNVUkxfT0ZGX1RfTUFYIC0gQ1VSTF9PRkZfVF9DKDEpKQogCiAjZW5kaWYgLyogSEVBREVSX0NVUkxfU1RSVE9PRkZUX0ggKi8KZGlmZiAtLWdpdCBhL2xpYi90ZWxuZXQuYyBiL2xpYi90ZWxuZXQuYwppbmRleCA5NDA5ZjQ5Li4xYTU2ODNkIDEwMDY0NAotLS0gYS9saWIvdGVsbmV0LmMKKysrIGIvbGliL3RlbG5ldC5jCkBAIC02Nyw2ICs2Nyw3IEBACiAjaW5jbHVkZSAic2VuZGYuaCIKICNpbmNsdWRlICJ0ZWxuZXQuaCIKICNpbmNsdWRlICJjb25uZWN0LmgiCisjaW5jbHVkZSAicHJvZ3Jlc3MuaCIKIAogI2RlZmluZSBfTVBSSU5URl9SRVBMQUNFIC8qIHVzZSBvdXIgZnVuY3Rpb25zIG9ubHkgKi8KICNpbmNsdWRlIDxjdXJsL21wcmludGYuaD4KQEAgLTk2MiwxNiArOTYzLDE2IEBACiAgIHN0cnVjdCBTZXNzaW9uSGFuZGxlICpkYXRhID0gY29ubi0+ZGF0YTsKICAgc3RydWN0IFRFTE5FVCAqdG4gPSAoc3RydWN0IFRFTE5FVCAqKWRhdGEtPnN0YXRlLnByb3RvLnRlbG5ldDsKIAotI2RlZmluZSBzdGFydHNraXBwaW5nKCkgXAotICAgIGlmKHN0YXJ0d3JpdGUgPj0gMCkgeyBcCi0gICAgICAgcmVzdWx0ID0gQ3VybF9jbGllbnRfd3JpdGUoY29ubiwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENMSUVOVFdSSVRFX0JPRFksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKSZpbmJ1ZltzdGFydHdyaXRlXSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluLXN0YXJ0d3JpdGUpOyBcCi0gICAgICBpZihyZXN1bHQgIT0gQ1VSTEVfT0spIFwKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsgXAotICAgIH0gXAotICAgIHN0YXJ0d3JpdGUgPSAtMQorI2RlZmluZSBzdGFydHNraXBwaW5nKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIGlmKHN0YXJ0d3JpdGUgPj0gMCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICByZXN1bHQgPSBDdXJsX2NsaWVudF93cml0ZShjb25uLCAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENMSUVOVFdSSVRFX0JPRFksICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKikmaW5idWZbc3RhcnR3cml0ZV0sICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbi1zdGFydHdyaXRlKTsgICAgICAgICAgICAgICAgXAorICAgIGlmKHJlc3VsdCAhPSBDVVJMRV9PSykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICByZXR1cm4gcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBzdGFydHdyaXRlID0gLTEKIAogI2RlZmluZSB3cml0ZWJ5dGUoKSBcCiAgICAgaWYoc3RhcnR3cml0ZSA8IDApIFwKQEAgLTEyMDYsOCArMTIwNywxMCBAQAogI2Vsc2UKICAgaW50IGludGVydmFsX21zOwogICBzdHJ1Y3QgcG9sbGZkIHBmZFsyXTsKKyAgaW50IHBvbGxfY250OworICBjdXJsX29mZl90IHRvdGFsX2RsID0gMDsKKyAgY3VybF9vZmZfdCB0b3RhbF91bCA9IDA7CiAjZW5kaWYKLSAgaW50IHJldDsKICAgc3NpemVfdCBucmVhZDsKICAgc3RydWN0IHRpbWV2YWwgbm93OwogICBib29sIGtlZXBvbiA9IFRSVUU7CkBAIC0xMzc5LDE0ICsxMzgyLDEzIEBACiAgICAgICB9CiAgICAgICBpZihldmVudHMubE5ldHdvcmtFdmVudHMgJiBGRF9SRUFEKSB7CiAgICAgICAgIC8qIHJlYWQgZGF0YSBmcm9tIG5ldHdvcmsgKi8KLSAgICAgICAgcmV0ID0gQ3VybF9yZWFkKGNvbm4sIHNvY2tmZCwgYnVmLCBCVUZTSVpFIC0gMSwgJm5yZWFkKTsKLSAgICAgICAgLyogcmV0dXJuZWQgc3ViLXplcm8sIHRoaXMgd291bGQndmUgYmxvY2tlZC4gTG9vcCBhZ2FpbiAqLwotICAgICAgICBpZihyZXQgPCAwKQorICAgICAgICBjb2RlID0gQ3VybF9yZWFkKGNvbm4sIHNvY2tmZCwgYnVmLCBCVUZTSVpFIC0gMSwgJm5yZWFkKTsKKyAgICAgICAgLyogcmVhZCB3b3VsZCd2ZSBibG9ja2VkLiBMb29wIGFnYWluICovCisgICAgICAgIGlmKGNvZGUgPT0gQ1VSTEVfQUdBSU4pCiAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIC8qIHJldHVybmVkIG5vdC16ZXJvLCB0aGlzIGFuIGVycm9yICovCi0gICAgICAgIGVsc2UgaWYocmV0KSB7CisgICAgICAgIGVsc2UgaWYoY29kZSkgewogICAgICAgICAgIGtlZXBvbiA9IEZBTFNFOwotICAgICAgICAgIGNvZGUgPSAoQ1VSTGNvZGUpcmV0OwogICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIC8qIHJldHVybmVkIHplcm8gYnV0IGFjdHVhbGx5IHJlY2VpdmVkIDAgb3IgbGVzcyBoZXJlLApAQCAtMTQwMiw4ICsxNDA0LDYgQEAKICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCi0gICAgICAgIGZmbHVzaChzdGRvdXQpOwotCiAgICAgICAgIC8qIE5lZ290aWF0ZSBpZiB0aGUgcGVlciBoYXMgc3RhcnRlZCBuZWdvdGlhdGluZywKICAgICAgICAgICAgb3RoZXJ3aXNlIGRvbid0LiBXZSBkb24ndCB3YW50IHRvIHNwZWFrIHRlbG5ldCB3aXRoCiAgICAgICAgICAgIG5vbi10ZWxuZXQgc2VydmVycywgbGlrZSBQT1Agb3IgU01UUC4gKi8KQEAgLTE0NDYsMzcgKzE0NDYsMzcgQEAKICNlbHNlCiAgIHBmZFswXS5mZCA9IHNvY2tmZDsKICAgcGZkWzBdLmV2ZW50cyA9IFBPTExJTjsKLSAgcGZkWzFdLmZkID0gMDsKLSAgcGZkWzFdLmV2ZW50cyA9IFBPTExJTjsKLSAgaW50ZXJ2YWxfbXMgPSAxICogMTAwMDsKKworICBpZiAoZGF0YS0+c2V0LmlzX2ZyZWFkX3NldCkgeworICAgIHBvbGxfY250ID0gMTsKKyAgICBpbnRlcnZhbF9tcyA9IDEwMDsgLyogcG9sbCB1c2VyLXN1cHBsaWVkIHJlYWQgZnVuY3Rpb24gKi8KKyAgfQorICBlbHNlIHsKKyAgICBwZmRbMV0uZmQgPSAwOworICAgIHBmZFsxXS5ldmVudHMgPSBQT0xMSU47CisgICAgcG9sbF9jbnQgPSAyOworICAgIGludGVydmFsX21zID0gMSAqIDEwMDA7CisgIH0KIAogICB3aGlsZShrZWVwb24pIHsKLSAgICBzd2l0Y2ggKEN1cmxfcG9sbChwZmQsIDIsIGludGVydmFsX21zKSkgeworICAgIHN3aXRjaCAoQ3VybF9wb2xsKHBmZCwgcG9sbF9jbnQsIGludGVydmFsX21zKSkgewogICAgIGNhc2UgLTE6ICAgICAgICAgICAgICAgICAgICAvKiBlcnJvciwgc3RvcCByZWFkaW5nICovCiAgICAgICBrZWVwb24gPSBGQUxTRTsKICAgICAgIGNvbnRpbnVlOwogICAgIGNhc2UgMDogICAgICAgICAgICAgICAgICAgICAvKiB0aW1lb3V0ICovCi0gICAgICBicmVhazsKKyAgICAgIHBmZFswXS5yZXZlbnRzID0gMDsKKyAgICAgIHBmZFsxXS5yZXZlbnRzID0gMDsKKyAgICAgIC8qIGZhbGwgdGhyb3VnaCAqLwogICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICAgICAgICAvKiByZWFkISAqLwotICAgICAgaWYocGZkWzFdLnJldmVudHMgJiBQT0xMSU4pIHsgLyogcmVhZCBmcm9tIHN0ZGluICovCi0gICAgICAgIG5yZWFkID0gcmVhZCgwLCBidWYsIDI1NSk7Ci0gICAgICAgIGNvZGUgPSBzZW5kX3RlbG5ldF9kYXRhKGNvbm4sIGJ1ZiwgbnJlYWQpOwotICAgICAgICBpZihjb2RlKSB7Ci0gICAgICAgICAga2VlcG9uID0gRkFMU0U7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgIH0KLQogICAgICAgaWYocGZkWzBdLnJldmVudHMgJiBQT0xMSU4pIHsKICAgICAgICAgLyogcmVhZCBkYXRhIGZyb20gbmV0d29yayAqLwotICAgICAgICByZXQgPSBDdXJsX3JlYWQoY29ubiwgc29ja2ZkLCBidWYsIEJVRlNJWkUgLSAxLCAmbnJlYWQpOwotICAgICAgICAvKiByZXR1cm5lZCBzdWItemVybywgdGhpcyB3b3VsZCd2ZSBibG9ja2VkLiBMb29wIGFnYWluICovCi0gICAgICAgIGlmKHJldCA8IDApCisgICAgICAgIGNvZGUgPSBDdXJsX3JlYWQoY29ubiwgc29ja2ZkLCBidWYsIEJVRlNJWkUgLSAxLCAmbnJlYWQpOworICAgICAgICAvKiByZWFkIHdvdWxkJ3ZlIGJsb2NrZWQuIExvb3AgYWdhaW4gKi8KKyAgICAgICAgaWYoY29kZSA9PSBDVVJMRV9BR0FJTikKICAgICAgICAgICBicmVhazsKICAgICAgICAgLyogcmV0dXJuZWQgbm90LXplcm8sIHRoaXMgYW4gZXJyb3IgKi8KLSAgICAgICAgZWxzZSBpZihyZXQpIHsKKyAgICAgICAgZWxzZSBpZihjb2RlKSB7CiAgICAgICAgICAga2VlcG9uID0gRkFMU0U7Ci0gICAgICAgICAgY29kZSA9IChDVVJMY29kZSlyZXQ7CiAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgLyogcmV0dXJuZWQgemVybyBidXQgYWN0dWFsbHkgcmVjZWl2ZWQgMCBvciBsZXNzIGhlcmUsCkBAIC0xNDg2LDYgKzE0ODYsOCBAQAogICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKKyAgICAgICAgdG90YWxfZGwgKz0gbnJlYWQ7CisgICAgICAgIEN1cmxfcGdyc1NldERvd25sb2FkQ291bnRlcihkYXRhLCB0b3RhbF9kbCk7CiAgICAgICAgIGNvZGUgPSB0ZWxyY3YoY29ubiwgKHVuc2lnbmVkIGNoYXIgKilidWYsIG5yZWFkKTsKICAgICAgICAgaWYoY29kZSkgewogICAgICAgICAgIGtlZXBvbiA9IEZBTFNFOwpAQCAtMTUwMCw3ICsxNTAyLDM5IEBACiAgICAgICAgICAgdG4tPmFscmVhZHlfbmVnb3RpYXRlZCA9IDE7CiAgICAgICAgIH0KICAgICAgIH0KLSAgICB9CisKKyAgICAgIG5yZWFkID0gMDsKKyAgICAgIGlmIChwb2xsX2NudCA9PSAyKSB7CisgICAgICAgIGlmKHBmZFsxXS5yZXZlbnRzICYgUE9MTElOKSB7IC8qIHJlYWQgZnJvbSBzdGRpbiAqLworICAgICAgICAgIG5yZWFkID0gcmVhZCgwLCBidWYsIEJVRlNJWkUgLSAxKTsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgZWxzZSB7CisgICAgICAgIC8qIHJlYWQgZnJvbSB1c2VyLXN1cHBsaWVkIG1ldGhvZCAqLworICAgICAgICBucmVhZCA9IChpbnQpY29ubi0+ZnJlYWRfZnVuYyhidWYsIDEsIEJVRlNJWkUgLSAxLCBjb25uLT5mcmVhZF9pbik7CisgICAgICAgIGlmIChucmVhZCA9PSBDVVJMX1JFQURGVU5DX0FCT1JUKSB7CisgICAgICAgICAga2VlcG9uID0gRkFMU0U7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgaWYgKG5yZWFkID09IENVUkxfUkVBREZVTkNfUEFVU0UpCisgICAgICAgICAgYnJlYWs7CisgICAgICB9CisKKyAgICAgIGlmIChucmVhZCA+IDApIHsKKyAgICAgICAgY29kZSA9IHNlbmRfdGVsbmV0X2RhdGEoY29ubiwgYnVmLCBucmVhZCk7CisgICAgICAgIGlmKGNvZGUpIHsKKyAgICAgICAgICBrZWVwb24gPSBGQUxTRTsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICB0b3RhbF91bCArPSBucmVhZDsKKyAgICAgICAgQ3VybF9wZ3JzU2V0VXBsb2FkQ291bnRlcihkYXRhLCB0b3RhbF91bCk7CisgICAgICB9CisgICAgICBlbHNlIGlmIChucmVhZCA8IDApCisgICAgICAgIGtlZXBvbiA9IEZBTFNFOworCisgICAgICBicmVhazsKKyAgICB9IC8qIHBvbGwgc3dpdGNoIHN0YXRlbWVudCAqLworCiAgICAgaWYoZGF0YS0+c2V0LnRpbWVvdXQpIHsKICAgICAgIG5vdyA9IEN1cmxfdHZub3coKTsKICAgICAgIGlmKEN1cmxfdHZkaWZmKG5vdywgY29ubi0+Y3JlYXRlZCkgPj0gZGF0YS0+c2V0LnRpbWVvdXQpIHsKQEAgLTE1MDksNiArMTU0MywxMSBAQAogICAgICAgICBrZWVwb24gPSBGQUxTRTsKICAgICAgIH0KICAgICB9CisKKyAgICBpZihDdXJsX3BncnNVcGRhdGUoY29ubikpIHsKKyAgICAgICBjb2RlID0gQ1VSTEVfQUJPUlRFRF9CWV9DQUxMQkFDSzsKKyAgICAgICBicmVhazsKKyAgICB9CiAgIH0KICNlbmRpZgogICAvKiBtYXJrIHRoaXMgYXMgIm5vIGZ1cnRoZXIgdHJhbnNmZXIgd2FudGVkIiAqLwpkaWZmIC0tZ2l0IGEvbGliL3RmdHAuYyBiL2xpYi90ZnRwLmMKaW5kZXggZGMyMWM1NC4uNzgyYmI3MyAxMDA2NDQKLS0tIGEvbGliL3RmdHAuYworKysgYi9saWIvdGZ0cC5jCkBAIC04Nyw4ICs4NywxMCBAQAogI2RlZmluZSBURlRQX0JMS1NJWkVfTUlOIDgKICNkZWZpbmUgVEZUUF9CTEtTSVpFX01BWCA2NTQ2NAogI2RlZmluZSBURlRQX09QVElPTl9CTEtTSVpFICJibGtzaXplIgotI2RlZmluZSBURlRQX09QVElPTl9UU0laRSAidHNpemUiCi0jZGVmaW5lIFRGVFBfT1BUSU9OX0lOVEVSVkFMICJpbnRlcnZhbCIKKworLyogZnJvbSBSRkMyMzQ5OiAqLworI2RlZmluZSBURlRQX09QVElPTl9UU0laRSAgICAidHNpemUiCisjZGVmaW5lIFRGVFBfT1BUSU9OX0lOVEVSVkFMICJ0aW1lb3V0IgogCiB0eXBlZGVmIGVudW0gewogICBURlRQX01PREVfTkVUQVNDSUk9MCwKQEAgLTE2Nyw3ICsxNjksNyBAQAogc3RhdGljIENVUkxjb2RlIHRmdHBfZGlzY29ubmVjdChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pOwogc3RhdGljIENVUkxjb2RlIHRmdHBfZG8oc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBib29sICpkb25lKTsKIHN0YXRpYyBDVVJMY29kZSB0ZnRwX2RvbmUoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENVUkxjb2RlLCBib29sIHByZW1hdHVyZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgIENVUkxjb2RlLCBib29sIHByZW1hdHVyZSk7CiBzdGF0aWMgQ1VSTGNvZGUgdGZ0cF9zZXR1cF9jb25uZWN0aW9uKHN0cnVjdCBjb25uZWN0ZGF0YSAqIGNvbm4pOwogc3RhdGljIENVUkxjb2RlIHRmdHBfbXVsdGlfc3RhdGVtYWNoKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgYm9vbCAqZG9uZSk7CiBzdGF0aWMgQ1VSTGNvZGUgdGZ0cF9kb2luZyhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGJvb2wgKmRvcGhhc2VfZG9uZSk7CkBAIC0zNzIsMTIgKzM3NCwxMiBAQAogICAgICAgfQogICAgICAgZWxzZSBpZihibGtzaXplID4gVEZUUF9CTEtTSVpFX01BWCkgewogICAgICAgICBmYWlsZihkYXRhLCAiJXMgKCVkKSIsICJibGtzaXplIGlzIGxhcmdlciB0aGFuIG1heCBzdXBwb3J0ZWQiLAotICAgICAgICAgICAgICAgIFRGVFBfQkxLU0laRV9NQVgpOworICAgICAgICAgICAgICBURlRQX0JMS1NJWkVfTUFYKTsKICAgICAgICAgcmV0dXJuIENVUkxFX1RGVFBfSUxMRUdBTDsKICAgICAgIH0KICAgICAgIGVsc2UgaWYoYmxrc2l6ZSA8IFRGVFBfQkxLU0laRV9NSU4pIHsKICAgICAgICAgZmFpbGYoZGF0YSwgIiVzICglZCkiLCAiYmxrc2l6ZSBpcyBzbWFsbGVyIHRoYW4gbWluIHN1cHBvcnRlZCIsCi0gICAgICAgICAgICAgICAgVEZUUF9CTEtTSVpFX01JTik7CisgICAgICAgICAgICAgIFRGVFBfQkxLU0laRV9NSU4pOwogICAgICAgICByZXR1cm4gQ1VSTEVfVEZUUF9JTExFR0FMOwogICAgICAgfQogICAgICAgZWxzZSBpZiAoYmxrc2l6ZSA+IHN0YXRlLT5yZXF1ZXN0ZWRfYmxrc2l6ZSkgewpAQCAtMzg1LDEzICszODcsMTMgQEAKICAgICAgICAgICogc3VwcG9ydCBmb3IgdGhlIHNlcnZlciByZXF1ZXN0aW5nIGEgYmlnZ2VyIGJsa3NpemUgdGhhbiB0aGUgY2xpZW50CiAgICAgICAgICAqIHJlcXVlc3RzICovCiAgICAgICAgIGZhaWxmKGRhdGEsICIlcyAoJWxkKSIsCi0gICAgICAgICAgICAgICAgInNlcnZlciByZXF1ZXN0ZWQgYmxrc2l6ZSBsYXJnZXIgdGhhbiBhbGxvY2F0ZWQiLCBibGtzaXplKTsKKyAgICAgICAgICAgICAgInNlcnZlciByZXF1ZXN0ZWQgYmxrc2l6ZSBsYXJnZXIgdGhhbiBhbGxvY2F0ZWQiLCBibGtzaXplKTsKICAgICAgICAgcmV0dXJuIENVUkxFX1RGVFBfSUxMRUdBTDsKICAgICAgIH0KIAogICAgICAgc3RhdGUtPmJsa3NpemUgPSAoaW50KWJsa3NpemU7CiAgICAgICBpbmZvZihkYXRhLCAiJXMgKCVkKSAlcyAoJWQpXG4iLCAiYmxrc2l6ZSBwYXJzZWQgZnJvbSBPQUNLIiwKLSAgICAgICAgc3RhdGUtPmJsa3NpemUsICJyZXF1ZXN0ZWQiLCBzdGF0ZS0+cmVxdWVzdGVkX2Jsa3NpemUpOworICAgICAgICAgICAgc3RhdGUtPmJsa3NpemUsICJyZXF1ZXN0ZWQiLCBzdGF0ZS0+cmVxdWVzdGVkX2Jsa3NpemUpOwogICAgIH0KICAgICBlbHNlIGlmKGNoZWNrcHJlZml4KG9wdGlvbiwgVEZUUF9PUFRJT05fVFNJWkUpKSB7CiAgICAgICBsb25nIHRzaXplID0gMDsKQEAgLTUyNCwxOCArNTI2LDIxIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBURlRQX09QVElPTl9CTEtTSVpFKTsKICAgICBzYnl0ZXMgKz0gdGZ0cF9vcHRpb25fYWRkKHN0YXRlLCBzYnl0ZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKXN0YXRlLT5zcGFja2V0LmRhdGErc2J5dGVzLCBidWYgKTsKLSAgICAvKiBhZGQgdGltZW91dCBvcHRpb24sIHRoaXMgaXMgdGhlIG1heCB0aW1lIHRoZSBzZXNzaW9uIG1heSBsaXZlICovCi0gICAgc25wcmludGYoIGJ1Ziwgc2l6ZW9mKGJ1ZiksICIlZCIsIHN0YXRlLT5yZXRyeV90aW1lKnN0YXRlLT5yZXRyeV9tYXggKTsKKworICAgIC8qIGFkZCB0aW1lb3V0IG9wdGlvbiAqLworICAgIHNucHJpbnRmKCBidWYsIHNpemVvZihidWYpLCAiJWQiLCBzdGF0ZS0+cmV0cnlfdGltZSk7CiAgICAgc2J5dGVzICs9IHRmdHBfb3B0aW9uX2FkZChzdGF0ZSwgc2J5dGVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKilzdGF0ZS0+c3BhY2tldC5kYXRhK3NieXRlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRGVFBfT1BUSU9OX0lOVEVSVkFMKTsKICAgICBzYnl0ZXMgKz0gdGZ0cF9vcHRpb25fYWRkKHN0YXRlLCBzYnl0ZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKXN0YXRlLT5zcGFja2V0LmRhdGErc2J5dGVzLCBidWYgKTsKIAorICAgIC8qIHRoZSB0eXBlY2FzZSBmb3IgdGhlIDNyZCBhcmd1bWVudCBpcyBtb3N0bHkgZm9yIHN5c3RlbXMgdGhhdCBkbworICAgICAgIG5vdCBoYXZlIGEgc2l6ZV90IGFyZ3VtZW50LCBsaWtlIG9sZGVyIHVuaXhlcyB0aGF0IHdhbnQgYW4gJ2ludCcgKi8KICAgICBzZW5kZGF0YSA9IHNlbmR0byhzdGF0ZS0+c29ja2ZkLCAodm9pZCAqKXN0YXRlLT5zcGFja2V0LmRhdGEsCi0gICAgICAgICAgICAgICAgICAgIHNieXRlcywgMCwKLSAgICAgICAgICAgICAgICAgICAgc3RhdGUtPmNvbm4tPmlwX2FkZHItPmFpX2FkZHIsCi0gICAgICAgICAgICAgICAgICAgIHN0YXRlLT5jb25uLT5pcF9hZGRyLT5haV9hZGRybGVuKTsKKyAgICAgICAgICAgICAgICAgICAgICAoU0VORF9UWVBFX0FSRzMpc2J5dGVzLCAwLAorICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLT5jb25uLT5pcF9hZGRyLT5haV9hZGRyLAorICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLT5jb25uLT5pcF9hZGRyLT5haV9hZGRybGVuKTsKICAgICBpZihzZW5kZGF0YSAhPSAoc3NpemVfdClzYnl0ZXMpIHsKICAgICAgIGZhaWxmKGRhdGEsICIlcyIsIEN1cmxfc3RyZXJyb3Ioc3RhdGUtPmNvbm4sIFNPQ0tFUlJOTykpOwogICAgIH0KQEAgLTU3MCw2ICs1NzUsMTAgQEAKICAgcmV0dXJuIHJlczsKIH0KIAorLyogdGhlIG5leHQgYmxvY2tudW0gaXMgeCArIDEgYnV0IGl0IG5lZWRzIHRvIHdyYXAgYXQgYW4gdW5zaWduZWQgMTZiaXQKKyAgIGJvdW5kYXJ5ICovCisjZGVmaW5lIE5FWFRfQkxPQ0tOVU0oeCkgKCgoeCkrMSkmMHhmZmZmKQorCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKICAqIHRmdHBfcngKQEAgLTU4OCwxNiArNTk3LDE3IEBACiAgIGNhc2UgVEZUUF9FVkVOVF9EQVRBOgogICAgIC8qIElzIHRoaXMgdGhlIGJsb2NrIHdlIGV4cGVjdD8gKi8KICAgICByYmxvY2sgPSBnZXRycGFja2V0YmxvY2soJnN0YXRlLT5ycGFja2V0KTsKLSAgICBpZigoc3RhdGUtPmJsb2NrKzEpICE9IHJibG9jaykgeworICAgIGlmKE5FWFRfQkxPQ0tOVU0oc3RhdGUtPmJsb2NrKSAhPSByYmxvY2spIHsKICAgICAgIC8qIE5vLCBsb2cgaXQsIHVwIHRoZSByZXRyeSBjb3VudCBhbmQgZmFpbCBpZiBvdmVyIHRoZSBsaW1pdCAqLwogICAgICAgaW5mb2YoZGF0YSwKICAgICAgICAgICAgICJSZWNlaXZlZCB1bmV4cGVjdGVkIERBVEEgcGFja2V0IGJsb2NrICVkXG4iLCByYmxvY2spOwogICAgICAgc3RhdGUtPnJldHJpZXMrKzsKLSAgICAgIGlmKHN0YXRlLT5yZXRyaWVzPnN0YXRlLT5yZXRyeV9tYXgpIHsKKyAgICAgIGlmKHN0YXRlLT5yZXRyaWVzID4gc3RhdGUtPnJldHJ5X21heCkgewogICAgICAgICBmYWlsZihkYXRhLCAidGZ0cF9yeDogZ2l2aW5nIHVwIHdhaXRpbmcgZm9yIGJsb2NrICVkIiwKLSAgICAgICAgICAgICAgc3RhdGUtPmJsb2NrKzEpOworICAgICAgICAgICAgICBORVhUX0JMT0NLTlVNKHN0YXRlLT5ibG9jaykpOwogICAgICAgICByZXR1cm4gQ1VSTEVfVEZUUF9JTExFR0FMOwogICAgICAgfQorICAgICAgYnJlYWs7CiAgICAgfQogICAgIC8qIFRoaXMgaXMgdGhlIGV4cGVjdGVkIGJsb2NrLiAgUmVzZXQgY291bnRlcnMgYW5kIEFDSyBpdC4gKi8KICAgICBzdGF0ZS0+YmxvY2sgPSAodW5zaWduZWQgc2hvcnQpcmJsb2NrOwpAQCAtNjQ4LDcgKzY1OCw3IEBACiAgICAgc3RhdGUtPnJldHJpZXMrKzsKICAgICBpbmZvZihkYXRhLAogICAgICAgICAgICJUaW1lb3V0IHdhaXRpbmcgZm9yIGJsb2NrICVkIEFDSy4gIFJldHJpZXMgPSAlZFxuIiwKLSAgICAgICAgICBzdGF0ZS0+YmxvY2srMSwgc3RhdGUtPnJldHJpZXMpOworICAgICAgICAgIE5FWFRfQkxPQ0tOVU0oc3RhdGUtPmJsb2NrKSwgc3RhdGUtPnJldHJpZXMpOwogICAgIGlmKHN0YXRlLT5yZXRyaWVzID4gc3RhdGUtPnJldHJ5X21heCkgewogICAgICAgc3RhdGUtPmVycm9yID0gVEZUUF9FUlJfVElNRU9VVDsKICAgICAgIHN0YXRlLT5zdGF0ZSA9IFRGVFBfU1RBVEVfRklOOwpAQCAtNjU5LDcgKzY2OSw2IEBACiAgICAgICAgICAgICAgICAgICAgICAgNCwgU0VORF80VEhfQVJHLAogICAgICAgICAgICAgICAgICAgICAgIChzdHJ1Y3Qgc29ja2FkZHIgKikmc3RhdGUtPnJlbW90ZV9hZGRyLAogICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLT5yZW1vdGVfYWRkcmxlbik7Ci0gICAgICAvKiBDaGVjayBhbGwgc2J5dGVzIHdlcmUgc2VudCAqLwogICAgICAgaWYoc2J5dGVzPDApIHsKICAgICAgICAgZmFpbGYoZGF0YSwgIiVzIiwgQ3VybF9zdHJlcnJvcihzdGF0ZS0+Y29ubiwgU09DS0VSUk5PKSk7CiAgICAgICAgIHJldHVybiBDVVJMRV9TRU5EX0VSUk9SOwpAQCAtNjcwLDEwICs2NzksMTAgQEAKICAgY2FzZSBURlRQX0VWRU5UX0VSUk9SOgogICAgIHNldHBhY2tldGV2ZW50KCZzdGF0ZS0+c3BhY2tldCwgVEZUUF9FVkVOVF9FUlJPUik7CiAgICAgc2V0cGFja2V0YmxvY2soJnN0YXRlLT5zcGFja2V0LCBzdGF0ZS0+YmxvY2spOwotICAgIHNieXRlcyA9IHNlbmR0byhzdGF0ZS0+c29ja2ZkLCAodm9pZCAqKXN0YXRlLT5zcGFja2V0LmRhdGEsCi0gICAgICAgICAgICAgICAgICAgIDQsIFNFTkRfNFRIX0FSRywKLSAgICAgICAgICAgICAgICAgICAgKHN0cnVjdCBzb2NrYWRkciAqKSZzdGF0ZS0+cmVtb3RlX2FkZHIsCi0gICAgICAgICAgICAgICAgICAgIHN0YXRlLT5yZW1vdGVfYWRkcmxlbik7CisgICAgKHZvaWQpc2VuZHRvKHN0YXRlLT5zb2NrZmQsICh2b2lkICopc3RhdGUtPnNwYWNrZXQuZGF0YSwKKyAgICAgICAgICAgICAgICAgNCwgU0VORF80VEhfQVJHLAorICAgICAgICAgICAgICAgICAoc3RydWN0IHNvY2thZGRyICopJnN0YXRlLT5yZW1vdGVfYWRkciwKKyAgICAgICAgICAgICAgICAgc3RhdGUtPnJlbW90ZV9hZGRybGVuKTsKICAgICAvKiBkb24ndCBib3RoZXIgd2l0aCB0aGUgcmV0dXJuIGNvZGUsIGJ1dCBpZiB0aGUgc29ja2V0IGlzIHN0aWxsIHVwIHdlCiAgICAgICogc2hvdWxkIGJlIGEgZ29vZCBURlRQIGNsaWVudCBhbmQgbGV0IHRoZSBzZXJ2ZXIga25vdyB3ZSdyZSBkb25lICovCiAgICAgc3RhdGUtPnN0YXRlID0gVEZUUF9TVEFURV9GSU47CkBAIC03MDcsNDIgKzcxNiw0OCBAQAogICBjYXNlIFRGVFBfRVZFTlRfQUNLOgogICBjYXNlIFRGVFBfRVZFTlRfT0FDSzoKICAgICBpZiAoZXZlbnQgPT0gVEZUUF9FVkVOVF9BQ0spIHsKLSAgICAgICAvKiBBY2sgdGhlIHBhY2tldCAqLwotICAgICAgIHJibG9jayA9IGdldHJwYWNrZXRibG9jaygmc3RhdGUtPnJwYWNrZXQpOworICAgICAgLyogQWNrIHRoZSBwYWNrZXQgKi8KKyAgICAgIHJibG9jayA9IGdldHJwYWNrZXRibG9jaygmc3RhdGUtPnJwYWNrZXQpOwogCi0gICAgICAgaWYocmJsb2NrICE9IHN0YXRlLT5ibG9jaykgewotICAgICAgICAgIC8qIFRoaXMgaXNuJ3QgdGhlIGV4cGVjdGVkIGJsb2NrLiAgTG9nIGl0IGFuZCB1cCB0aGUgcmV0cnkgY291bnRlciAqLwotICAgICAgICAgIGluZm9mKGRhdGEsICJSZWNlaXZlZCBBQ0sgZm9yIGJsb2NrICVkLCBleHBlY3RpbmcgJWRcbiIsCi0gICAgICAgICAgICAgICAgcmJsb2NrLCBzdGF0ZS0+YmxvY2spOwotICAgICAgICAgIHN0YXRlLT5yZXRyaWVzKys7Ci0gICAgICAgICAgLyogQmFpbCBvdXQgaWYgb3ZlciB0aGUgbWF4aW11bSAqLwotICAgICAgICAgIGlmKHN0YXRlLT5yZXRyaWVzPnN0YXRlLT5yZXRyeV9tYXgpIHsKLSAgICAgICAgICAgICBmYWlsZihkYXRhLCAidGZ0cF90eDogZ2l2aW5nIHVwIHdhaXRpbmcgZm9yIGJsb2NrICVkIGFjayIsCi0gICAgICAgICAgICAgICAgICAgc3RhdGUtPmJsb2NrKTsKLSAgICAgICAgICAgICByZXMgPSBDVVJMRV9TRU5EX0VSUk9SOworICAgICAgaWYocmJsb2NrICE9IHN0YXRlLT5ibG9jayAmJgorICAgICAgICAgLyogVGhlcmUncyBhIGJ1ZyBpbiB0ZnRwZC1ocGEgdGhhdCBjYXVzZXMgaXQgdG8gc2VuZCB1cyBhbiBhY2sgZm9yCisgICAgICAgICAgKiA2NTUzNSB3aGVuIHRoZSBibG9jayBudW1iZXIgd3JhcHMgdG8gMC4gU28gd2hlbiB3ZSdyZSBleHBlY3RpbmcKKyAgICAgICAgICAqIDAsIGFsc28gYWNjZXB0IDY1NTM1LiBTZWUKKyAgICAgICAgICAqIGh0dHA6Ly9zeXNsaW51eC56eXRvci5jb20vYXJjaGl2ZXMvMjAxMC1TZXB0ZW1iZXIvMDE1MjUzLmh0bWwKKyAgICAgICAgICAqICovCisgICAgICAgICAhKHN0YXRlLT5ibG9jayA9PSAwICYmIHJibG9jayA9PSA2NTUzNSkpIHsKKyAgICAgICAgLyogVGhpcyBpc24ndCB0aGUgZXhwZWN0ZWQgYmxvY2suICBMb2cgaXQgYW5kIHVwIHRoZSByZXRyeSBjb3VudGVyICovCisgICAgICAgIGluZm9mKGRhdGEsICJSZWNlaXZlZCBBQ0sgZm9yIGJsb2NrICVkLCBleHBlY3RpbmcgJWRcbiIsCisgICAgICAgICAgICAgIHJibG9jaywgc3RhdGUtPmJsb2NrKTsKKyAgICAgICAgc3RhdGUtPnJldHJpZXMrKzsKKyAgICAgICAgLyogQmFpbCBvdXQgaWYgb3ZlciB0aGUgbWF4aW11bSAqLworICAgICAgICBpZihzdGF0ZS0+cmV0cmllcz5zdGF0ZS0+cmV0cnlfbWF4KSB7CisgICAgICAgICAgZmFpbGYoZGF0YSwgInRmdHBfdHg6IGdpdmluZyB1cCB3YWl0aW5nIGZvciBibG9jayAlZCBhY2siLAorICAgICAgICAgICAgICAgIHN0YXRlLT5ibG9jayk7CisgICAgICAgICAgcmVzID0gQ1VSTEVfU0VORF9FUlJPUjsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAvKiBSZS1zZW5kIHRoZSBkYXRhIHBhY2tldCAqLworICAgICAgICAgIHNieXRlcyA9IHNlbmR0byhzdGF0ZS0+c29ja2ZkLCAodm9pZCAqKSZzdGF0ZS0+c3BhY2tldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgNCtzdGF0ZS0+c2J5dGVzLCBTRU5EXzRUSF9BUkcsCisgICAgICAgICAgICAgICAgICAgICAgICAgIChzdHJ1Y3Qgc29ja2FkZHIgKikmc3RhdGUtPnJlbW90ZV9hZGRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS0+cmVtb3RlX2FkZHJsZW4pOworICAgICAgICAgIC8qIENoZWNrIGFsbCBzYnl0ZXMgd2VyZSBzZW50ICovCisgICAgICAgICAgaWYoc2J5dGVzPDApIHsKKyAgICAgICAgICAgIGZhaWxmKGRhdGEsICIlcyIsIEN1cmxfc3RyZXJyb3Ioc3RhdGUtPmNvbm4sIFNPQ0tFUlJOTykpOworICAgICAgICAgICAgcmVzID0gQ1VSTEVfU0VORF9FUlJPUjsKICAgICAgICAgICB9Ci0gICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgLyogUmUtc2VuZCB0aGUgZGF0YSBwYWNrZXQgKi8KLSAgICAgICAgICAgICBzYnl0ZXMgPSBzZW5kdG8oc3RhdGUtPnNvY2tmZCwgKHZvaWQgKikmc3RhdGUtPnNwYWNrZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQrc3RhdGUtPnNieXRlcywgU0VORF80VEhfQVJHLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RydWN0IHNvY2thZGRyICopJnN0YXRlLT5yZW1vdGVfYWRkciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUtPnJlbW90ZV9hZGRybGVuKTsKLSAgICAgICAgICAgICAvKiBDaGVjayBhbGwgc2J5dGVzIHdlcmUgc2VudCAqLwotICAgICAgICAgICAgIGlmKHNieXRlczwwKSB7Ci0gICAgICAgICAgICAgICAgZmFpbGYoZGF0YSwgIiVzIiwgQ3VybF9zdHJlcnJvcihzdGF0ZS0+Y29ubiwgU09DS0VSUk5PKSk7Ci0gICAgICAgICAgICAgICAgcmVzID0gQ1VSTEVfU0VORF9FUlJPUjsKLSAgICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICAgIHJldHVybiByZXM7Ci0gICAgICAgfQotICAgICAgIC8qIFRoaXMgaXMgdGhlIGV4cGVjdGVkIHBhY2tldC4gIFJlc2V0IHRoZSBjb3VudGVycyBhbmQgc2VuZCB0aGUgbmV4dAotICAgICAgICAgIGJsb2NrICovCi0gICAgICAgdGltZSgmc3RhdGUtPnJ4X3RpbWUpOwotICAgICAgIHN0YXRlLT5ibG9jaysrOworICAgICAgICB9CisgICAgICAgIHJldHVybiByZXM7CisgICAgICB9CisgICAgICAvKiBUaGlzIGlzIHRoZSBleHBlY3RlZCBwYWNrZXQuICBSZXNldCB0aGUgY291bnRlcnMgYW5kIHNlbmQgdGhlIG5leHQKKyAgICAgICAgIGJsb2NrICovCisgICAgICB0aW1lKCZzdGF0ZS0+cnhfdGltZSk7CisgICAgICBzdGF0ZS0+YmxvY2srKzsKICAgICB9Ci0gICAgZWxzZSB7Ci0gICAgICAgc3RhdGUtPmJsb2NrID0gMTsgLyogZmlyc3QgZGF0YSBibG9jayBpcyAxIHdoZW4gdXNpbmcgT0FDSyAqLwotICAgIH0KKyAgICBlbHNlCisgICAgICBzdGF0ZS0+YmxvY2sgPSAxOyAvKiBmaXJzdCBkYXRhIGJsb2NrIGlzIDEgd2hlbiB1c2luZyBPQUNLICovCisKICAgICBzdGF0ZS0+cmV0cmllcyA9IDA7CiAgICAgc2V0cGFja2V0ZXZlbnQoJnN0YXRlLT5zcGFja2V0LCBURlRQX0VWRU5UX0RBVEEpOwogICAgIHNldHBhY2tldGJsb2NrKCZzdGF0ZS0+c3BhY2tldCwgc3RhdGUtPmJsb2NrKTsKQEAgLTc1MCw4ICs3NjUsNyBAQAogICAgICAgc3RhdGUtPnN0YXRlID0gVEZUUF9TVEFURV9GSU47CiAgICAgICByZXR1cm4gQ1VSTEVfT0s7CiAgICAgfQotICAgIHJlcyA9IEN1cmxfZmlsbHJlYWRidWZmZXIoc3RhdGUtPmNvbm4sIChzaXplX3Qpc3RhdGUtPmJsa3NpemUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc3RhdGUtPnNieXRlcyk7CisgICAgcmVzID0gQ3VybF9maWxscmVhZGJ1ZmZlcihzdGF0ZS0+Y29ubiwgc3RhdGUtPmJsa3NpemUsICZzdGF0ZS0+c2J5dGVzKTsKICAgICBpZihyZXMpCiAgICAgICByZXR1cm4gcmVzOwogICAgIHNieXRlcyA9IHNlbmR0byhzdGF0ZS0+c29ja2ZkLCAodm9pZCAqKXN0YXRlLT5zcGFja2V0LmRhdGEsCkBAIC03NzIsNyArNzg2LDcgQEAKICAgICAvKiBJbmNyZW1lbnQgdGhlIHJldHJ5IGNvdW50ZXIgYW5kIGxvZyB0aGUgdGltZW91dCAqLwogICAgIHN0YXRlLT5yZXRyaWVzKys7CiAgICAgaW5mb2YoZGF0YSwgIlRpbWVvdXQgd2FpdGluZyBmb3IgYmxvY2sgJWQgQUNLLiAiCi0gICAgICAgICAgIiBSZXRyaWVzID0gJWRcbiIsIHN0YXRlLT5ibG9jaysxLCBzdGF0ZS0+cmV0cmllcyk7CisgICAgICAgICAgIiBSZXRyaWVzID0gJWRcbiIsIE5FWFRfQkxPQ0tOVU0oc3RhdGUtPmJsb2NrKSwgc3RhdGUtPnJldHJpZXMpOwogICAgIC8qIERlY2lkZSBpZiB3ZSd2ZSBoYWQgZW5vdWdoICovCiAgICAgaWYoc3RhdGUtPnJldHJpZXMgPiBzdGF0ZS0+cmV0cnlfbWF4KSB7CiAgICAgICBzdGF0ZS0+ZXJyb3IgPSBURlRQX0VSUl9USU1FT1VUOwpAQCAtNzk4LDEwICs4MTIsOSBAQAogICAgIHN0YXRlLT5zdGF0ZSA9IFRGVFBfU1RBVEVfRklOOwogICAgIHNldHBhY2tldGV2ZW50KCZzdGF0ZS0+c3BhY2tldCwgVEZUUF9FVkVOVF9FUlJPUik7CiAgICAgc2V0cGFja2V0YmxvY2soJnN0YXRlLT5zcGFja2V0LCBzdGF0ZS0+YmxvY2spOwotICAgIHNieXRlcyA9IHNlbmR0byhzdGF0ZS0+c29ja2ZkLCAodm9pZCAqKXN0YXRlLT5zcGFja2V0LmRhdGEsCi0gICAgICAgICAgICAgICAgICAgIDQsIFNFTkRfNFRIX0FSRywKLSAgICAgICAgICAgICAgICAgICAgKHN0cnVjdCBzb2NrYWRkciAqKSZzdGF0ZS0+cmVtb3RlX2FkZHIsCi0gICAgICAgICAgICAgICAgICAgIHN0YXRlLT5yZW1vdGVfYWRkcmxlbik7CisgICAgKHZvaWQpc2VuZHRvKHN0YXRlLT5zb2NrZmQsICh2b2lkICopc3RhdGUtPnNwYWNrZXQuZGF0YSwgNCwgU0VORF80VEhfQVJHLAorICAgICAgICAgICAgICAgICAoc3RydWN0IHNvY2thZGRyICopJnN0YXRlLT5yZW1vdGVfYWRkciwKKyAgICAgICAgICAgICAgICAgc3RhdGUtPnJlbW90ZV9hZGRybGVuKTsKICAgICAvKiBkb24ndCBib3RoZXIgd2l0aCB0aGUgcmV0dXJuIGNvZGUsIGJ1dCBpZiB0aGUgc29ja2V0IGlzIHN0aWxsIHVwIHdlCiAgICAgICogc2hvdWxkIGJlIGEgZ29vZCBURlRQIGNsaWVudCBhbmQgbGV0IHRoZSBzZXJ2ZXIga25vdyB3ZSdyZSBkb25lICovCiAgICAgc3RhdGUtPnN0YXRlID0gVEZUUF9TVEFURV9GSU47CkBAIC0xMDI1LDcgKzEwMzgsNyBAQAogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogc3RhdGljIENVUkxjb2RlIHRmdHBfZG9uZShzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIENVUkxjb2RlIHN0YXR1cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHByZW1hdHVyZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBwcmVtYXR1cmUpCiB7CiAgIENVUkxjb2RlIGNvZGUgPSBDVVJMRV9PSzsKICAgdGZ0cF9zdGF0ZV9kYXRhX3QgKnN0YXRlID0gKHRmdHBfc3RhdGVfZGF0YV90ICopY29ubi0+cHJvdG8udGZ0cGM7CkBAIC0xMDQ5LDcgKzEwNjIsNyBAQAogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogc3RhdGljIGludCB0ZnRwX2dldHNvY2soc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBjdXJsX3NvY2tldF90ICpzb2NrcywKLSAgICAgICAgICAgICAgICAgICAgICAgaW50IG51bXNvY2tzKQorICAgICAgICAgICAgICAgICAgICAgICAgaW50IG51bXNvY2tzKQogewogICBpZighbnVtc29ja3MpCiAgICAgcmV0dXJuIEdFVFNPQ0tfQkxBTks7CkBAIC0xMDc4LDExICsxMDkxLDExIEBACiAgIC8qIFJlY2VpdmUgdGhlIHBhY2tldCAqLwogICBmcm9tbGVuID0gc2l6ZW9mKGZyb21hZGRyKTsKICAgc3RhdGUtPnJieXRlcyA9IChpbnQpcmVjdmZyb20oc3RhdGUtPnNvY2tmZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQgKilzdGF0ZS0+cnBhY2tldC5kYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS0+Ymxrc2l6ZSs0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RydWN0IHNvY2thZGRyICopJmZyb21hZGRyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZnJvbWxlbik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkICopc3RhdGUtPnJwYWNrZXQuZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUtPmJsa3NpemUrNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0cnVjdCBzb2NrYWRkciAqKSZmcm9tYWRkciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmZyb21sZW4pOwogICBpZihzdGF0ZS0+cmVtb3RlX2FkZHJsZW49PTApIHsKICAgICBtZW1jcHkoJnN0YXRlLT5yZW1vdGVfYWRkciwgJmZyb21hZGRyLCBmcm9tbGVuKTsKICAgICBzdGF0ZS0+cmVtb3RlX2FkZHJsZW4gPSBmcm9tbGVuOwpAQCAtMTEwMiwxMCArMTExNSwxMCBAQAogICAgIGNhc2UgVEZUUF9FVkVOVF9EQVRBOgogICAgICAgLyogRG9uJ3QgcGFzcyB0byB0aGUgY2xpZW50IGVtcHR5IG9yIHJldHJhbnNtaXR0ZWQgcGFja2V0cyAqLwogICAgICAgaWYoc3RhdGUtPnJieXRlcyA+IDQgJiYKLSAgICAgICAgICAoKHN0YXRlLT5ibG9jaysxKSA9PSBnZXRycGFja2V0YmxvY2soJnN0YXRlLT5ycGFja2V0KSkpIHsKKyAgICAgICAgIChORVhUX0JMT0NLTlVNKHN0YXRlLT5ibG9jaykgPT0gZ2V0cnBhY2tldGJsb2NrKCZzdGF0ZS0+cnBhY2tldCkpKSB7CiAgICAgICAgIHJlc3VsdCA9IEN1cmxfY2xpZW50X3dyaXRlKGNvbm4sIENMSUVOVFdSSVRFX0JPRFksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKXN0YXRlLT5ycGFja2V0LmRhdGErNCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLT5yYnl0ZXMtNCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopc3RhdGUtPnJwYWNrZXQuZGF0YSs0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS0+cmJ5dGVzLTQpOwogICAgICAgICBpZihyZXN1bHQpIHsKICAgICAgICAgICB0ZnRwX3N0YXRlX21hY2hpbmUoc3RhdGUsIFRGVFBfRVZFTlRfRVJST1IpOwogICAgICAgICAgIHJldHVybiByZXN1bHQ7CkBAIC0xMTIyLDggKzExMzUsOCBAQAogICAgICAgYnJlYWs7CiAgICAgY2FzZSBURlRQX0VWRU5UX09BQ0s6CiAgICAgICByZXN1bHQgPSB0ZnRwX3BhcnNlX29wdGlvbl9hY2soc3RhdGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBjaGFyICopc3RhdGUtPnJwYWNrZXQuZGF0YSsyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS0+cmJ5dGVzLTIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBjaGFyICopc3RhdGUtPnJwYWNrZXQuZGF0YSsyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLT5yYnl0ZXMtMik7CiAgICAgICBpZihyZXN1bHQpCiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICBicmVhazsKQEAgLTExNjQsMTcgKzExNzcsMTggQEAKICAgICAgICAgICAgICAgICAgKGxvbmcpY3VycmVudCwgKGxvbmcpc3RhdGUtPm1heF90aW1lKSk7CiAgICAgc3RhdGUtPmVycm9yID0gVEZUUF9FUlJfVElNRU9VVDsKICAgICBzdGF0ZS0+c3RhdGUgPSBURlRQX1NUQVRFX0ZJTjsKLSAgICByZXR1cm4oMCk7CisgICAgcmV0dXJuIDA7CiAgIH0KICAgZWxzZSBpZiAoY3VycmVudCA+IHN0YXRlLT5yeF90aW1lK3N0YXRlLT5yZXRyeV90aW1lKSB7CiAgICAgaWYgKGV2ZW50KQogICAgICAgKmV2ZW50ID0gVEZUUF9FVkVOVF9USU1FT1VUOwogICAgIHRpbWUoJnN0YXRlLT5yeF90aW1lKTsgLyogdXBkYXRlIGV2ZW4gdGhvdWdoIHdlIHJlY2VpdmVkIG5vdGhpbmcgKi8KLSAgICByZXR1cm4oc3RhdGUtPm1heF90aW1lLWN1cnJlbnQpOwogICB9Ci0gIGVsc2UgewotICAgIHJldHVybihzdGF0ZS0+bWF4X3RpbWUtY3VycmVudCk7Ci0gIH0KKworICAvKiB0aGVyZSdzIGEgdHlwZWNhc3QgYmVsb3cgaGVyZSBzaW5jZSAndGltZV90JyBtYXkgaW4gZmFjdCBiZSBsYXJnZXIgdGhhbgorICAgICAnbG9uZycsIGJ1dCB3ZSBlc3RpbWF0ZSB0aGF0IGEgJ2xvbmcnIHdpbGwgc3RpbGwgYmUgYWJsZSB0byBob2xkIG51bWJlcgorICAgICBvZiBzZWNvbmRzIGV2ZW4gaWYgIm9ubHkiIDMyIGJpdCAqLworICByZXR1cm4gKGxvbmcpKHN0YXRlLT5tYXhfdGltZSAtIGN1cnJlbnQpOwogfQogCiAKQEAgLTExOTIsNyArMTIwNiw3IEBACiAgIENVUkxjb2RlICAgICAgICAgICAgICByZXN1bHQgPSBDVVJMRV9PSzsKICAgc3RydWN0IFNlc3Npb25IYW5kbGUgICpkYXRhID0gY29ubi0+ZGF0YTsKICAgdGZ0cF9zdGF0ZV9kYXRhX3QgICAgICpzdGF0ZSA9ICh0ZnRwX3N0YXRlX2RhdGFfdCAqKWNvbm4tPnByb3RvLnRmdHBjOwotICBpbnQgICAgICAgICAgICAgICAgICAgZmRfcmVhZDsKKyAgY3VybF9zb2NrZXRfdCAgICAgICAgIGZkX3JlYWQ7CiAgIGxvbmcgICAgICAgICAgICAgICAgICB0aW1lb3V0X21zOwogICBzdHJ1Y3QgU2luZ2xlUmVxdWVzdCAgKmsgPSAmZGF0YS0+cmVxOwogICBzdHJ1Y3QgdGltZXZhbCAgICAgICAgdHJhbnNhY3Rpb25fc3RhcnQgPSBDdXJsX3R2bm93KCk7CkBAIC0xMjQ0LDExICsxMjU4LDExIEBACiAKICAgICAvKiBGb3JjZSBhIHByb2dyZXNzIGNhbGxiYWNrIGlmIGl0J3MgYmVlbiB0b28gbG9uZyAqLwogICAgIGlmIChDdXJsX3R2ZGlmZihrLT5ub3csIGstPnN0YXJ0KSA+PSBkYXRhLT5zZXQudGltZW91dCkgewotICAgICAgIGlmKEN1cmxfcGdyc1VwZGF0ZShjb25uKSkgewotICAgICAgICAgIHRmdHBfc3RhdGVfbWFjaGluZShzdGF0ZSwgVEZUUF9FVkVOVF9FUlJPUik7Ci0gICAgICAgICAgcmV0dXJuIENVUkxFX0FCT1JURURfQllfQ0FMTEJBQ0s7Ci0gICAgICAgfQotICAgICAgIGstPnN0YXJ0ID0gay0+bm93OworICAgICAgaWYoQ3VybF9wZ3JzVXBkYXRlKGNvbm4pKSB7CisgICAgICAgIHRmdHBfc3RhdGVfbWFjaGluZShzdGF0ZSwgVEZUUF9FVkVOVF9FUlJPUik7CisgICAgICAgIHJldHVybiBDVVJMRV9BQk9SVEVEX0JZX0NBTExCQUNLOworICAgICAgfQorICAgICAgay0+c3RhcnQgPSBrLT5ub3c7CiAgICAgfQogCiAgICAgaWYocmMgPT0gLTEpIHsKQEAgLTEyNzUsNyArMTI4OSw3IEBACiAgICAgICBlbHNlIHsKICAgICAgICAgcmVzdWx0ID0gdGZ0cF9yZWNlaXZlX3BhY2tldChjb25uKTsKICAgICAgICAgaWYgKHJlc3VsdCA9PSBDVVJMRV9PSykKLSAgICAgICAgICAgdHJhbnNhY3Rpb25fc3RhcnQgPSBDdXJsX3R2bm93KCk7CisgICAgICAgICAgdHJhbnNhY3Rpb25fc3RhcnQgPSBDdXJsX3R2bm93KCk7CiAKICAgICAgICAgaWYoay0+Ynl0ZWNvdW50cCkKICAgICAgICAgICAqay0+Ynl0ZWNvdW50cCA9IGstPmJ5dGVjb3VudDsgLyogcmVhZCBjb3VudCAqLwpAQCAtMTI5Niw3ICsxMzEwLDcgQEAKICAgfQogCiAgIC8qIFRlbGwgY3VybCB3ZSdyZSBkb25lICovCi0gIHJlc3VsdCA9IEN1cmxfc2V0dXBfdHJhbnNmZXIoY29ubiwgLTEsIC0xLCBGQUxTRSwgTlVMTCwgLTEsIE5VTEwpOworICBDdXJsX3NldHVwX3RyYW5zZmVyKGNvbm4sIC0xLCAtMSwgRkFMU0UsIE5VTEwsIC0xLCBOVUxMKTsKIAogICByZXR1cm4ocmVzdWx0KTsKIH0KQEAgLTEzMzAsNyArMTM0NCw3IEBACiAgICAgKmRvbmUgPSAoYm9vbCkoc3RhdGUtPnN0YXRlID09IFRGVFBfU1RBVEVfRklOKTsKICAgICBpZigqZG9uZSkKICAgICAgIC8qIFRlbGwgY3VybCB3ZSdyZSBkb25lICovCi0gICAgICByZXN1bHQgPSBDdXJsX3NldHVwX3RyYW5zZmVyKGNvbm4sIC0xLCAtMSwgRkFMU0UsIE5VTEwsIC0xLCBOVUxMKTsKKyAgICAgIEN1cmxfc2V0dXBfdHJhbnNmZXIoY29ubiwgLTEsIC0xLCBGQUxTRSwgTlVMTCwgLTEsIE5VTEwpOwogICB9CiAgIGVsc2UgewogICAgIC8qIG5vIHRpbWVvdXRzIHRvIGhhbmRsZSwgY2hlY2sgb3VyIHNvY2tldCAqLwpAQCAtMTM1Miw3ICsxMzY2LDcgQEAKICAgICAgICpkb25lID0gKGJvb2wpKHN0YXRlLT5zdGF0ZSA9PSBURlRQX1NUQVRFX0ZJTik7CiAgICAgICBpZigqZG9uZSkKICAgICAgICAgLyogVGVsbCBjdXJsIHdlJ3JlIGRvbmUgKi8KLSAgICAgICAgcmVzdWx0ID0gQ3VybF9zZXR1cF90cmFuc2Zlcihjb25uLCAtMSwgLTEsIEZBTFNFLCBOVUxMLCAtMSwgTlVMTCk7CisgICAgICAgIEN1cmxfc2V0dXBfdHJhbnNmZXIoY29ubiwgLTEsIC0xLCBGQUxTRSwgTlVMTCwgLTEsIE5VTEwpOwogICAgIH0KICAgICAvKiBpZiByYyA9PSAwLCB0aGVuIHNlbGVjdCgpIHRpbWVkIG91dCAqLwogICB9CkBAIC0xNDQ3LDcgKzE0NjEsNyBAQAogCiAgIC8qIElmIHRmdHBfcGVyZm9ybSgpIHJldHVybmVkIGFuIGVycm9yLCB1c2UgdGhhdCBmb3IgcmV0dXJuIGNvZGUuIElmIGl0CiAgICAgIHdhcyBPSywgc2VlIGlmIHRmdHBfdHJhbnNsYXRlX2NvZGUoKSBoYXMgYW4gZXJyb3IuICovCi0gIGlmIChjb2RlID09IENVUkxFX09LKSAKKyAgaWYgKGNvZGUgPT0gQ1VSTEVfT0spCiAgICAgLyogSWYgd2UgaGF2ZSBlbmNvdW50ZXJlZCBhbiBpbnRlcm5hbCB0ZnRwIGVycm9yLCB0cmFuc2xhdGUgaXQuICovCiAgICAgY29kZSA9IHRmdHBfdHJhbnNsYXRlX2NvZGUoc3RhdGUtPmVycm9yKTsKIApkaWZmIC0tZ2l0IGEvbGliL3RyYW5zZmVyLmMgYi9saWIvdHJhbnNmZXIuYwppbmRleCAyZDUwNDA1Li43OGJkN2YxIDEwMDY0NAotLS0gYS9saWIvdHJhbnNmZXIuYworKysgYi9saWIvdHJhbnNmZXIuYwpAQCAtMTAzLDYgKzEwMyw3IEBACiAjaW5jbHVkZSAibXVsdGlpZi5oIgogI2luY2x1ZGUgImVhc3lpZi5oIiAvKiBmb3IgQ3VybF9jb252ZXJ0X3RvX25ldHdvcmsgcHJvdG90eXBlICovCiAjaW5jbHVkZSAicnRzcC5oIgorI2luY2x1ZGUgImNvbm5lY3QuaCIKIAogI2RlZmluZSBfTVBSSU5URl9SRVBMQUNFIC8qIHVzZSBvdXIgZnVuY3Rpb25zIG9ubHkgKi8KICNpbmNsdWRlIDxjdXJsL21wcmludGYuaD4KQEAgLTE5NCw3ICsxOTUsOCBAQAogICAgICAgLyogXG4gd2lsbCBiZWNvbWUgXHJcbiBsYXRlciBvbiAqLwogICAgICAgZW5kb2ZsaW5lX25hdGl2ZSAgPSAiXG4iOwogICAgICAgZW5kb2ZsaW5lX25ldHdvcmsgPSAiXHgwYSI7Ci0gICAgfSBlbHNlIHsKKyAgICB9CisgICAgZWxzZSB7CiAgICAgICBlbmRvZmxpbmVfbmF0aXZlICA9ICJcclxuIjsKICAgICAgIGVuZG9mbGluZV9uZXR3b3JrID0gIlx4MGRceDBhIjsKICAgICB9CkBAIC0yMTksMjEgKzIyMSwyMCBAQAogICAgIGlmKGRhdGEtPnNldC5wcmVmZXJfYXNjaWkpIHsKICAgICAgIC8qIHRyYW5zbGF0ZSB0aGUgcHJvdG9jb2wgYW5kIGRhdGEgKi8KICAgICAgIGxlbmd0aCA9IG5yZWFkOwotICAgIH0gZWxzZSB7CisgICAgfQorICAgIGVsc2UgewogICAgICAgLyoganVzdCB0cmFuc2xhdGUgdGhlIHByb3RvY29sIHBvcnRpb24gKi8KICAgICAgIGxlbmd0aCA9IHN0cmxlbihoZXhidWZmZXIpOwogICAgIH0KICAgICByZXMgPSBDdXJsX2NvbnZlcnRfdG9fbmV0d29yayhkYXRhLCBkYXRhLT5yZXEudXBsb2FkX2Zyb21oZXJlLCBsZW5ndGgpOwogICAgIC8qIEN1cmxfY29udmVydF90b19uZXR3b3JrIGNhbGxzIGZhaWxmIGlmIHVuc3VjY2Vzc2Z1bCAqLwotICAgIGlmKHJlcyAhPSBDVVJMRV9PSykgeworICAgIGlmKHJlcykKICAgICAgIHJldHVybihyZXMpOwotICAgIH0KICNlbmRpZiAvKiBDVVJMX0RPRVNfQ09OVkVSU0lPTlMgKi8KIAotICAgIGlmKChucmVhZCAtIGhleGxlbikgPT0gMCkgeworICAgIGlmKChucmVhZCAtIGhleGxlbikgPT0gMCkKICAgICAgIC8qIG1hcmsgdGhpcyBhcyBkb25lIG9uY2UgdGhpcyBjaHVuayBpcyB0cmFuc2ZlcmVkICovCiAgICAgICBkYXRhLT5yZXEudXBsb2FkX2RvbmUgPSBUUlVFOwotICAgIH0KIAogICAgIG5yZWFkKz0oaW50KXN0cmxlbihlbmRvZmxpbmVfbmF0aXZlKTsgLyogZm9yIHRoZSBhZGRlZCBlbmQgb2YgbGluZSAqLwogICB9CkBAIC0zNDAsMTEgKzM0MSwxMSBAQAogCiAgICAgc2hvdyA9IENVUkxNSU4oY29ubi0+YnVmX2xlbiAtIGNvbm4tPnJlYWRfcG9zLCBzaXplb2YoYnVmKS0xKTsKICAgICBpZihjb25uLT5tYXN0ZXJfYnVmZmVyKSB7Ci0gICAgICAgIG1lbWNweShidWYsIGNvbm4tPm1hc3Rlcl9idWZmZXIgKyBjb25uLT5yZWFkX3Bvcywgc2hvdyk7Ci0gICAgICAgIGJ1ZltzaG93XSA9ICdcMCc7CisgICAgICBtZW1jcHkoYnVmLCBjb25uLT5tYXN0ZXJfYnVmZmVyICsgY29ubi0+cmVhZF9wb3MsIHNob3cpOworICAgICAgYnVmW3Nob3ddID0gJ1wwJzsKICAgICB9CiAgICAgZWxzZSB7Ci0gICAgICAgIGJ1ZlswXSA9ICdcMCc7CisgICAgICBidWZbMF0gPSAnXDAnOwogICAgIH0KIAogICAgIERFQlVHRihpbmZvZihjb25uLT5kYXRhLApAQCAtMzc2LDEyICszNzcsMTEgQEAKICAgKmRvbmUgPSBGQUxTRTsKIAogICAvKiBUaGlzIGlzIHdoZXJlIHdlIGxvb3AgdW50aWwgd2UgaGF2ZSByZWFkIGV2ZXJ5dGhpbmcgdGhlcmUgaXMgdG8KLSAgICAgcmVhZCBvciB3ZSBnZXQgYSBFV09VTERCTE9DSyAqLworICAgICByZWFkIG9yIHdlIGdldCBhIENVUkxFX0FHQUlOICovCiAgIGRvIHsKICAgICBzaXplX3QgYnVmZmVyc2l6ZSA9IGRhdGEtPnNldC5idWZmZXJfc2l6ZT8KICAgICAgIGRhdGEtPnNldC5idWZmZXJfc2l6ZSA6IEJVRlNJWkU7CiAgICAgc2l6ZV90IGJ5dGVzdG9yZWFkID0gYnVmZmVyc2l6ZTsKLSAgICBpbnQgcmVhZHJjOwogCiAgICAgaWYoay0+c2l6ZSAhPSAtMSAmJiAhay0+aGVhZGVyKSB7CiAgICAgICAvKiBtYWtlIHN1cmUgd2UgZG9uJ3QgcmVhZCAidG9vIG11Y2giIGlmIHdlIGNhbiBoZWxwIGl0IHNpbmNlIHdlCkBAIC0zOTQsMTUgKzM5NCwxMiBAQAogCiAgICAgaWYoYnl0ZXN0b3JlYWQpIHsKICAgICAgIC8qIHJlY2VpdmUgZGF0YSBmcm9tIHRoZSBuZXR3b3JrISAqLwotICAgICAgcmVhZHJjID0gQ3VybF9yZWFkKGNvbm4sIGNvbm4tPnNvY2tmZCwgay0+YnVmLCBieXRlc3RvcmVhZCwgJm5yZWFkKTsKKyAgICAgIHJlc3VsdCA9IEN1cmxfcmVhZChjb25uLCBjb25uLT5zb2NrZmQsIGstPmJ1ZiwgYnl0ZXN0b3JlYWQsICZucmVhZCk7CiAKLSAgICAgIC8qIHN1Ynplcm8sIHRoaXMgd291bGQndmUgYmxvY2tlZCAqLwotICAgICAgaWYoMCA+IHJlYWRyYykKKyAgICAgIC8qIHJlYWQgd291bGQndmUgYmxvY2tlZCAqLworICAgICAgaWYoQ1VSTEVfQUdBSU4gPT0gcmVzdWx0KQogICAgICAgICBicmVhazsgLyogZ2V0IG91dCBvZiBsb29wICovCiAKLSAgICAgIC8qIGdldCB0aGUgQ1VSTGNvZGUgZnJvbSB0aGUgaW50ICovCi0gICAgICByZXN1bHQgPSAoQ1VSTGNvZGUpcmVhZHJjOwotCiAgICAgICBpZihyZXN1bHQ+MCkKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CkBAIC01OTgsOSArNTk1LDEyIEBACiAKICAgICAgICAgICBkYXRhbGVmdCA9IGNvbm4tPmNodW5rLmRhdGFsZWZ0OwogICAgICAgICAgIGlmKGRhdGFsZWZ0ICE9IDApIHsKLSAgICAgICAgICAgIGluZm9mKGNvbm4tPmRhdGEsICJMZWZ0b3ZlcnMgYWZ0ZXIgY2h1bmtpbmcuICIKLSAgICAgICAgICAgICAgICAgICIgUmV3aW5kaW5nICV6dSBieXRlc1xuIixkYXRhbGVmdCk7Ci0gICAgICAgICAgICByZWFkX3Jld2luZChjb25uLCBkYXRhbGVmdCk7CisgICAgICAgICAgICBpbmZvZihjb25uLT5kYXRhLCAiTGVmdG92ZXJzIGFmdGVyIGNodW5raW5nOiAlenUgYnl0ZXMiLCBkYXRhbGVmdCk7CisgICAgICAgICAgICBpZihjb25uLT5kYXRhLT5tdWx0aSAmJiBDdXJsX211bHRpX2NhblBpcGVsaW5lKGNvbm4tPmRhdGEtPm11bHRpKSkgeworICAgICAgICAgICAgICAvKiBvbmx5IGF0dGVtcHQgdGhlIHJld2luZCBpZiB3ZSB0cnVseSBhcmUgcGlwZWxpbmluZyAqLworICAgICAgICAgICAgICBpbmZvZihjb25uLT5kYXRhLCAiUmV3aW5kaW5nICV6dSBieXRlc1xuIixkYXRhbGVmdCk7CisgICAgICAgICAgICAgIHJlYWRfcmV3aW5kKGNvbm4sIGRhdGFsZWZ0KTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgLyogSWYgaXQgcmV0dXJuZWQgT0ssIHdlIGp1c3Qga2VlcCBnb2luZyAqLwpAQCAtNjIzLDIyICs2MjMsMjIgQEAKICAgICAgICAgICAgIC8qIFRoZSAnZXhjZXNzJyBhbW91bnQgYmVsb3cgY2FuJ3QgYmUgbW9yZSB0aGFuIEJVRlNJWkUgd2hpY2gKICAgICAgICAgICAgICAgIGFsd2F5cyB3aWxsIGZpdCBpbiBhIHNpemVfdCAqLwogICAgICAgICAgICAgaW5mb2YoZGF0YSwKLSAgICAgICAgICAgICAgICAiUmV3aW5kaW5nIHN0cmVhbSBieSA6ICV6dSIKLSAgICAgICAgICAgICAgICAiIGJ5dGVzIG9uIHVybCAlcyAoc2l6ZSA9ICUiIEZPUk1BVF9PRkZfVAotICAgICAgICAgICAgICAgICIsIG1heGRvd25sb2FkID0gJSIgRk9STUFUX09GRl9UCi0gICAgICAgICAgICAgICAgIiwgYnl0ZWNvdW50ID0gJSIgRk9STUFUX09GRl9UICIsIG5yZWFkID0gJXpkKVxuIiwKLSAgICAgICAgICAgICAgICBleGNlc3MsIGRhdGEtPnN0YXRlLnBhdGgsCi0gICAgICAgICAgICAgICAgay0+c2l6ZSwgay0+bWF4ZG93bmxvYWQsIGstPmJ5dGVjb3VudCwgbnJlYWQpOworICAgICAgICAgICAgICAgICAgIlJld2luZGluZyBzdHJlYW0gYnkgOiAlenUiCisgICAgICAgICAgICAgICAgICAiIGJ5dGVzIG9uIHVybCAlcyAoc2l6ZSA9ICUiIEZPUk1BVF9PRkZfVAorICAgICAgICAgICAgICAgICAgIiwgbWF4ZG93bmxvYWQgPSAlIiBGT1JNQVRfT0ZGX1QKKyAgICAgICAgICAgICAgICAgICIsIGJ5dGVjb3VudCA9ICUiIEZPUk1BVF9PRkZfVCAiLCBucmVhZCA9ICV6ZClcbiIsCisgICAgICAgICAgICAgICAgICBleGNlc3MsIGRhdGEtPnN0YXRlLnBhdGgsCisgICAgICAgICAgICAgICAgICBrLT5zaXplLCBrLT5tYXhkb3dubG9hZCwgay0+Ynl0ZWNvdW50LCBucmVhZCk7CiAgICAgICAgICAgICByZWFkX3Jld2luZChjb25uLCBleGNlc3MpOwogICAgICAgICAgIH0KICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIGluZm9mKGRhdGEsCi0gICAgICAgICAgICAgICAgIkV4Y2VzcyBmb3VuZCBpbiBhIG5vbiBwaXBlbGluZWQgcmVhZDoiCi0gICAgICAgICAgICAgICAgIiBleGNlc3MgPSAlenUiCi0gICAgICAgICAgICAgICAgIiwgc2l6ZSA9ICUiIEZPUk1BVF9PRkZfVAotICAgICAgICAgICAgICAgICIsIG1heGRvd25sb2FkID0gJSIgRk9STUFUX09GRl9UCi0gICAgICAgICAgICAgICAgIiwgYnl0ZWNvdW50ID0gJSIgRk9STUFUX09GRl9UICJcbiIsCi0gICAgICAgICAgICAgICAgZXhjZXNzLCBrLT5zaXplLCBrLT5tYXhkb3dubG9hZCwgay0+Ynl0ZWNvdW50KTsKKyAgICAgICAgICAgICAgICAgICJFeGNlc3MgZm91bmQgaW4gYSBub24gcGlwZWxpbmVkIHJlYWQ6IgorICAgICAgICAgICAgICAgICAgIiBleGNlc3MgPSAlenUiCisgICAgICAgICAgICAgICAgICAiLCBzaXplID0gJSIgRk9STUFUX09GRl9UCisgICAgICAgICAgICAgICAgICAiLCBtYXhkb3dubG9hZCA9ICUiIEZPUk1BVF9PRkZfVAorICAgICAgICAgICAgICAgICAgIiwgYnl0ZWNvdW50ID0gJSIgRk9STUFUX09GRl9UICJcbiIsCisgICAgICAgICAgICAgICAgICBleGNlc3MsIGstPnNpemUsIGstPm1heGRvd25sb2FkLCBrLT5ieXRlY291bnQpOwogICAgICAgICAgIH0KICAgICAgICAgfQogCkBAIC03MzgsNyArNzM4LDcgQEAKIAogICAgICAgLyogUGFyc2UgdGhlIGV4Y2VzcyBkYXRhICovCiAgICAgICBrLT5zdHIgKz0gbnJlYWQ7Ci0gICAgICBucmVhZCA9IGV4Y2VzczsKKyAgICAgIG5yZWFkID0gKHNzaXplX3QpZXhjZXNzOwogCiAgICAgICByZXN1bHQgPSBDdXJsX3J0c3BfcnRwX3JlYWR3cml0ZShkYXRhLCBjb25uLCAmbnJlYWQsICZyZWFkbW9yZSk7CiAgICAgICBpZihyZXN1bHQpCkBAIC04MTUsNiArODE1LDkgQEAKICAgICAgICAgICBrLT5rZWVwb24gJj0gfktFRVBfU0VORDsgICAgICAgICAvKiBkaXNhYmxlIHdyaXRpbmcgKi8KICAgICAgICAgICBrLT5zdGFydDEwMCA9IEN1cmxfdHZub3coKTsgICAgICAgLyogdGltZW91dCBjb3VudCBzdGFydHMgbm93ICovCiAgICAgICAgICAgKmRpZHdoYXQgJj0gfktFRVBfU0VORDsgIC8qIHdlIGRpZG4ndCB3cml0ZSBhbnl0aGluZyBhY3R1YWxseSAqLworCisgICAgICAgICAgLyogc2V0IGEgdGltZW91dCBmb3IgdGhlIG11bHRpIGludGVyZmFjZSAqLworICAgICAgICAgIEN1cmxfZXhwaXJlKGRhdGEsIENVUkxfVElNRU9VVF9FWFBFQ1RfMTAwKTsKICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCkBAIC05OTQsNyArOTk3LDcgQEAKICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cyBpcyBub3Qga25vd24uICovCiAgICAgc2VsZWN0X3JlcyA9IEN1cmxfc29ja2V0X3JlYWR5KGZkX3JlYWQsIGZkX3dyaXRlLCAwKTsKIAotICBpZihzZWxlY3RfcmVzID09IENVUkxfQ1NFTEVDVF9FUlIpIHsKKyAgaWYoc2VsZWN0X3JlcyAmIENVUkxfQ1NFTEVDVF9FUlIpIHsKICAgICBmYWlsZihkYXRhLCAic2VsZWN0L3BvbGwgcmV0dXJuZWQgZXJyb3IiKTsKICAgICByZXR1cm4gQ1VSTEVfU0VORF9FUlJPUjsKICAgfQpAQCAtMTA2MSwxNiArMTA2NCwxNyBAQAogICAgIHJldHVybiByZXN1bHQ7CiAKICAgaWYoay0+a2VlcG9uKSB7Ci0gICAgaWYoZGF0YS0+c2V0LnRpbWVvdXQgJiYKLSAgICAgICAoQ3VybF90dmRpZmYoay0+bm93LCBrLT5zdGFydCkgPj0gZGF0YS0+c2V0LnRpbWVvdXQpKSB7CisgICAgaWYoMCA+IEN1cmxfdGltZWxlZnQoY29ubiwgJmstPm5vdywgRkFMU0UpKSB7CiAgICAgICBpZihrLT5zaXplICE9IC0xKSB7CiAgICAgICAgIGZhaWxmKGRhdGEsICJPcGVyYXRpb24gdGltZWQgb3V0IGFmdGVyICVsZCBtaWxsaXNlY29uZHMgd2l0aCAlIgogICAgICAgICAgICAgICBGT1JNQVRfT0ZGX1QgIiBvdXQgb2YgJSIgRk9STUFUX09GRl9UICIgYnl0ZXMgcmVjZWl2ZWQiLAotICAgICAgICAgICAgICBDdXJsX3R2ZGlmZihrLT5ub3csIGstPnN0YXJ0KSwgay0+Ynl0ZWNvdW50LCBrLT5zaXplKTsKLSAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgIEN1cmxfdHZkaWZmKGstPm5vdywgZGF0YS0+cHJvZ3Jlc3MudF9zdGFydHNpbmdsZSksIGstPmJ5dGVjb3VudCwKKyAgICAgICAgICAgICAgay0+c2l6ZSk7CisgICAgICB9CisgICAgICBlbHNlIHsKICAgICAgICAgZmFpbGYoZGF0YSwgIk9wZXJhdGlvbiB0aW1lZCBvdXQgYWZ0ZXIgJWxkIG1pbGxpc2Vjb25kcyB3aXRoICUiCiAgICAgICAgICAgICAgIEZPUk1BVF9PRkZfVCAiIGJ5dGVzIHJlY2VpdmVkIiwKLSAgICAgICAgICAgICAgQ3VybF90dmRpZmYoay0+bm93LCBrLT5zdGFydCksIGstPmJ5dGVjb3VudCk7CisgICAgICAgICAgICAgIEN1cmxfdHZkaWZmKGstPm5vdywgZGF0YS0+cHJvZ3Jlc3MudF9zdGFydHNpbmdsZSksIGstPmJ5dGVjb3VudCk7CiAgICAgICB9CiAgICAgICByZXR1cm4gQ1VSTEVfT1BFUkFUSU9OX1RJTUVET1VUOwogICAgIH0KQEAgLTEyMjUsNyArMTIyOSw3IEBACiAgICAqLwogICBpZihydiA+IDB4N2ZmZmZmZmYpCiAgICAgcnYgPSAweDdmZmZmZmZmOwotICAKKwogICByZXR1cm4gKGxvbmcpcnY7CiB9CiAKQEAgLTEzNDMsMTIgKzEzNDcsMTAgQEAKICAgICAgICAgIHRvIHdvcmsgd2l0aCwgc2tpcCB0aGUgdGltZW91dCAqLwogICAgICAgdGltZW91dF9tcyA9IDA7CiAgICAgZWxzZSB7Ci0gICAgICBpZihkYXRhLT5zZXQudGltZW91dCkgewotICAgICAgICB0b3RtcCA9IChpbnQpKGRhdGEtPnNldC50aW1lb3V0IC0gQ3VybF90dmRpZmYoay0+bm93LCBrLT5zdGFydCkpOwotICAgICAgICBpZih0b3RtcCA8IDApCi0gICAgICAgICAgcmV0dXJuIENVUkxFX09QRVJBVElPTl9USU1FRE9VVDsKLSAgICAgIH0KLSAgICAgIGVsc2UKKyAgICAgIHRvdG1wID0gQ3VybF90aW1lbGVmdChjb25uLCAmay0+bm93LCBGQUxTRSk7CisgICAgICBpZih0b3RtcCA8IDApCisgICAgICAgIHJldHVybiBDVVJMRV9PUEVSQVRJT05fVElNRURPVVQ7CisgICAgICBlbHNlIGlmKCF0b3RtcCkKICAgICAgICAgdG90bXAgPSAxMDAwOwogCiAgICAgICBpZiAodG90bXAgPCB0aW1lb3V0X21zKQpAQCAtMTQzMyw2ICsxNDM1LDEyIEBACiAgIEN1cmxfaW5pdGluZm8oZGF0YSk7IC8qIHJlc2V0IHNlc3Npb24tc3BlY2lmaWMgaW5mb3JtYXRpb24gInZhcmlhYmxlcyIgKi8KICAgQ3VybF9wZ3JzU3RhcnROb3coZGF0YSk7CiAKKyAgaWYoZGF0YS0+c2V0LnRpbWVvdXQpCisgICAgQ3VybF9leHBpcmUoZGF0YSwgZGF0YS0+c2V0LnRpbWVvdXQpOworCisgIGlmKGRhdGEtPnNldC5jb25uZWN0dGltZW91dCkKKyAgICBDdXJsX2V4cGlyZShkYXRhLCBkYXRhLT5zZXQuY29ubmVjdHRpbWVvdXQpOworCiAgIHJldHVybiBDVVJMRV9PSzsKIH0KIApAQCAtMjAwOSwxMiArMjAxNyw3IEBACiAgIHJldHVybiBDVVJMRV9PSzsKIH0KIAotLyoKLSAqIEN1cmxfcGVyZm9ybSgpIGlzIHRoZSBpbnRlcm5hbCBoaWdoLWxldmVsIGZ1bmN0aW9uIHRoYXQgZ2V0cyBjYWxsZWQgYnkgdGhlCi0gKiBleHRlcm5hbCBjdXJsX2Vhc3lfcGVyZm9ybSgpIGZ1bmN0aW9uLiBJdCBpbml0cywgcGVyZm9ybXMgYW5kIGNsZWFucyB1cCBhCi0gKiBzaW5nbGUgZmlsZSB0cmFuc2Zlci4KLSAqLwotQ1VSTGNvZGUgQ3VybF9wZXJmb3JtKHN0cnVjdCBTZXNzaW9uSGFuZGxlICpkYXRhKQorc3RhdGljIENVUkxjb2RlIEN1cmxfZG9fcGVyZm9ybShzdHJ1Y3QgU2Vzc2lvbkhhbmRsZSAqZGF0YSkKIHsKICAgQ1VSTGNvZGUgcmVzOwogICBDVVJMY29kZSByZXMyOwpAQCAtMjA0OSw2ICsyMDUyLDE1IEBACiAgICAgICByZXMgPSBDdXJsX2RvKCZjb25uLCAmZG9fZG9uZSk7CiAKICAgICAgIGlmKHJlcyA9PSBDVVJMRV9PSykgeworICAgICAgICBpZihjb25uLT5kYXRhLT5zZXQud2lsZGNhcmRtYXRjaCkgeworICAgICAgICAgIGlmKGNvbm4tPmRhdGEtPndpbGRjYXJkLnN0YXRlID09IENVUkxXQ19ET05FIHx8CisgICAgICAgICAgICAgY29ubi0+ZGF0YS0+d2lsZGNhcmQuc3RhdGUgPT0gQ1VSTFdDX1NLSVApIHsKKyAgICAgICAgICAgIC8qIGtlZXAgY29ubmVjdGlvbiBvcGVuIGZvciBhcHBsaWNhdGlvbiB0byB1c2UgdGhlIHNvY2tldCAqLworICAgICAgICAgICAgY29ubi0+Yml0cy5jbG9zZSA9IEZBTFNFOworICAgICAgICAgICAgcmVzID0gQ3VybF9kb25lKCZjb25uLCBDVVJMRV9PSywgRkFMU0UpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgfQorICAgICAgICB9CiAgICAgICAgIHJlcyA9IFRyYW5zZmVyKGNvbm4pOyAvKiBub3cgZmV0Y2ggdGhhdCBVUkwgcGxlYXNlICovCiAgICAgICAgIGlmKChyZXMgPT0gQ1VSTEVfT0spIHx8IChyZXMgPT0gQ1VSTEVfUkVDVl9FUlJPUikpIHsKICAgICAgICAgICBib29sIHJldHJ5ID0gRkFMU0U7CkBAIC0yMDU2LDEzICsyMDY4LDEyIEBACiAgICAgICAgICAgaWYocmMpCiAgICAgICAgICAgICByZXMgPSByYzsKICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICByZXRyeSA9IChib29sKShuZXd1cmw/VFJVRTpGQUxTRSk7CisgICAgICAgICAgICByZXRyeSA9IChuZXd1cmw/VFJVRTpGQUxTRSk7CiAKICAgICAgICAgICBpZihyZXRyeSkgeworICAgICAgICAgICAgLyogd2Uga25vdyAobmV3dXJsICE9IE5VTEwpIGF0IHRoaXMgcG9pbnQgKi8KICAgICAgICAgICAgIHJlcyA9IENVUkxFX09LOwogICAgICAgICAgICAgZm9sbG93ID0gRk9MTE9XX1JFVFJZOwotICAgICAgICAgICAgaWYgKCFuZXd1cmwpCi0gICAgICAgICAgICAgIHJlcyA9IENVUkxFX09VVF9PRl9NRU1PUlk7CiAgICAgICAgICAgfQogICAgICAgICAgIGVsc2UgaWYgKHJlcyA9PSBDVVJMRV9PSykgewogICAgICAgICAgICAgLyoKQEAgLTIxMTMsOSArMjEyNCw5IEBACiAgICAgICAgIC8qIEN1cmxfZG8oKSBmYWlsZWQsIGNsZWFuIHVwIGxlZnQtb3ZlcnMgaW4gdGhlIGRvbmUtY2FsbCwgYnV0IG5vdGUKICAgICAgICAgICAgdGhhdCBhdCBzb21lIGNhc2VzIHRoZSBjb25uIHBvaW50ZXIgaXMgTlVMTCB3aGVuIEN1cmxfZG8oKSBmYWlsZWQKICAgICAgICAgICAgYW5kIHRoZSBjb25uZWN0aW9uIGNhY2hlIGlzIHZlcnkgc21hbGwgc28gb25seSBjYWxsIEN1cmxfZG9uZSgpIGlmCi0gICAgICAgICAgIGNvbm4gaXMgc3RpbGwgImFsaXZlIi4KLSAgICAgICAgKi8KLSAgICAgICAgcmVzMiA9IEN1cmxfZG9uZSgmY29ubiwgcmVzLCBGQUxTRSk7CisgICAgICAgICAgIGNvbm4gaXMgc3RpbGwgImFsaXZlIi4gKi8KKyAgICAgICAgLyogaWdub3JlIHJldHVybiBjb2RlIHNpbmNlIHdlIGFscmVhZHkgaGF2ZSBhbiBlcnJvciB0byByZXR1cm4gKi8KKyAgICAgICAgKHZvaWQpQ3VybF9kb25lKCZjb25uLCByZXMsIEZBTFNFKTsKIAogICAgICAgLyoKICAgICAgICAqIEltcG9ydGFudDogJ2Nvbm4nIGNhbm5vdCBiZSB1c2VkIGhlcmUsIHNpbmNlIGl0IG1heSBoYXZlIGJlZW4gY2xvc2VkCkBAIC0yMTY2LDEwICsyMTc3LDQzIEBACiB9CiAKIC8qCisgKiBDdXJsX3BlcmZvcm0oKSBpcyB0aGUgaW50ZXJuYWwgaGlnaC1sZXZlbCBmdW5jdGlvbiB0aGF0IGdldHMgY2FsbGVkIGJ5IHRoZQorICogZXh0ZXJuYWwgY3VybF9lYXN5X3BlcmZvcm0oKSBmdW5jdGlvbi4gSXQgaW5pdHMsIHBlcmZvcm1zIGFuZCBjbGVhbnMgdXAgYQorICogc2luZ2xlIGZpbGUgdHJhbnNmZXIuCisgKi8KK0NVUkxjb2RlIEN1cmxfcGVyZm9ybShzdHJ1Y3QgU2Vzc2lvbkhhbmRsZSAqZGF0YSkKK3sKKyAgQ1VSTGNvZGUgcmVzOworICBpZighZGF0YS0+c2V0LndpbGRjYXJkbWF0Y2gpCisgICAgcmV0dXJuIEN1cmxfZG9fcGVyZm9ybShkYXRhKTsKKworICAvKiBpbml0IG1haW4gd2lsZGNhcmQgc3RydWN0dXJlcyAqLworICByZXMgPSBDdXJsX3dpbGRjYXJkX2luaXQoJmRhdGEtPndpbGRjYXJkKTsKKyAgaWYocmVzKQorICAgIHJldHVybiByZXM7CisKKyAgcmVzID0gQ3VybF9kb19wZXJmb3JtKGRhdGEpOworICBpZihyZXMpIHsKKyAgICBDdXJsX3dpbGRjYXJkX2R0b3IoJmRhdGEtPndpbGRjYXJkKTsKKyAgICByZXR1cm4gcmVzOworICB9CisKKyAgLyogd2lsZGNhcmQgbG9vcCAqLworICB3aGlsZSghcmVzICYmIGRhdGEtPndpbGRjYXJkLnN0YXRlICE9IENVUkxXQ19ET05FKQorICAgIHJlcyA9IEN1cmxfZG9fcGVyZm9ybShkYXRhKTsKKworICBDdXJsX3dpbGRjYXJkX2R0b3IoJmRhdGEtPndpbGRjYXJkKTsKKworICAvKiB3aWxkY2FyZCBkb3dubG9hZCBmaW5pc2hlZCBvciBmYWlsZWQgKi8KKyAgZGF0YS0+d2lsZGNhcmQuc3RhdGUgPSBDVVJMV0NfSU5JVDsKKyAgcmV0dXJuIHJlczsKK30KKworLyoKICAqIEN1cmxfc2V0dXBfdHJhbnNmZXIoKSBpcyBjYWxsZWQgdG8gc2V0dXAgc29tZSBiYXNpYyBwcm9wZXJ0aWVzIGZvciB0aGUKICAqIHVwY29taW5nIHRyYW5zZmVyLgogICovCi1DVVJMY29kZQordm9pZAogQ3VybF9zZXR1cF90cmFuc2ZlcigKICAgc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCAvKiBjb25uZWN0aW9uIGRhdGEgKi8KICAgaW50IHNvY2tpbmRleCwgICAgICAgICAgICAvKiBzb2NrZXQgaW5kZXggdG8gcmVhZCBmcm9tIG9yIC0xICovCkBAIC0yMjE0LDkgKzIyNTgsOCBAQAogICAvKiB3ZSB3YW50IGhlYWRlciBhbmQvb3IgYm9keSwgaWYgbmVpdGhlciB0aGVuIGRvbid0IGRvIHRoaXMhICovCiAgIGlmKGstPmdldGhlYWRlciB8fCAhZGF0YS0+c2V0Lm9wdF9ub19ib2R5KSB7CiAKLSAgICBpZihjb25uLT5zb2NrZmQgIT0gQ1VSTF9TT0NLRVRfQkFEKSB7CisgICAgaWYoY29ubi0+c29ja2ZkICE9IENVUkxfU09DS0VUX0JBRCkKICAgICAgIGstPmtlZXBvbiB8PSBLRUVQX1JFQ1Y7Ci0gICAgfQogCiAgICAgaWYoY29ubi0+d3JpdGVzb2NrZmQgIT0gQ1VSTF9TT0NLRVRfQkFEKSB7CiAgICAgICAvKiBIVFRQIDEuMSBtYWdpYzoKQEAgLTIyMzMsNiArMjI3Niw5IEBACiAgICAgICAgIC8qIHdhaXQgd2l0aCB3cml0ZSB1bnRpbCB3ZSBlaXRoZXIgZ290IDEwMC1jb250aW51ZSBvciBhIHRpbWVvdXQgKi8KICAgICAgICAgay0+ZXhwMTAwID0gRVhQMTAwX0FXQUlUSU5HX0NPTlRJTlVFOwogICAgICAgICBrLT5zdGFydDEwMCA9IGstPnN0YXJ0OworCisgICAgICAgIC8qIHNldCBhIHRpbWVvdXQgZm9yIHRoZSBtdWx0aSBpbnRlcmZhY2UgKi8KKyAgICAgICAgQ3VybF9leHBpcmUoZGF0YSwgQ1VSTF9USU1FT1VUX0VYUEVDVF8xMDApOwogICAgICAgfQogICAgICAgZWxzZSB7CiAgICAgICAgIGlmKGRhdGEtPnN0YXRlLmV4cGVjdDEwMGhlYWRlcikKQEAgLTIyNDYsNSArMjI5Miw0IEBACiAgICAgfSAvKiBpZihjb25uLT53cml0ZXNvY2tmZCAhPSBDVVJMX1NPQ0tFVF9CQUQpICovCiAgIH0gLyogaWYoay0+Z2V0aGVhZGVyIHx8ICFkYXRhLT5zZXQub3B0X25vX2JvZHkpICovCiAKLSAgcmV0dXJuIENVUkxFX09LOwogfQpkaWZmIC0tZ2l0IGEvbGliL3RyYW5zZmVyLmggYi9saWIvdHJhbnNmZXIuaAppbmRleCA0YzJiYzllLi43OTBlMWUzIDEwMDY0NAotLS0gYS9saWIvdHJhbnNmZXIuaAorKysgYi9saWIvdHJhbnNmZXIuaApAQCAtNyw3ICs3LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDA5LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpAQCAtNDksNyArNDksNyBAQAogQ1VSTGNvZGUgQ3VybF9yZXRyeV9yZXF1ZXN0KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgY2hhciAqKnVybCk7CiAKIC8qIFRoaXMgc2V0cyB1cCBhIGZvcnRoY29taW5nIHRyYW5zZmVyICovCi1DVVJMY29kZQordm9pZAogQ3VybF9zZXR1cF90cmFuc2ZlciAoc3RydWN0IGNvbm5lY3RkYXRhICpkYXRhLAogICAgICAgICAgICAgICAgaW50IHNvY2tpbmRleCwgICAgICAgICAgIC8qIHNvY2tldCBpbmRleCB0byByZWFkIGZyb20gb3IgLTEgKi8KICAgICAgICAgICAgICAgIGN1cmxfb2ZmX3Qgc2l6ZSwgICAgICAgICAvKiAtMSBpZiB1bmtub3duIGF0IHRoaXMgcG9pbnQgKi8KZGlmZiAtLWdpdCBhL2xpYi91cmwuYyBiL2xpYi91cmwuYwppbmRleCAzNTdmMjEzLi4xYjY1YTkyIDEwMDY0NAotLS0gYS9saWIvdXJsLmMKKysrIGIvbGliL3VybC5jCkBAIC0xMzcsNiArMTM3LDggQEAKICNpbmNsdWRlICJodHRwX250bG0uaCIKICNpbmNsdWRlICJzb2Nrcy5oIgogI2luY2x1ZGUgInJ0c3AuaCIKKyNpbmNsdWRlICJjdXJsX3J0bXAuaCIKKyNpbmNsdWRlICJnb3BoZXIuaCIKIAogI2RlZmluZSBfTVBSSU5URl9SRVBMQUNFIC8qIHVzZSBvdXIgZnVuY3Rpb25zIG9ubHkgKi8KICNpbmNsdWRlIDxjdXJsL21wcmludGYuaD4KQEAgLTE1MCwxMSArMTUyLDYgQEAKIHN0YXRpYyB2b2lkIGNvbm5fZnJlZShzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pOwogc3RhdGljIHZvaWQgc2lnbmFsUGlwZUNsb3NlKHN0cnVjdCBjdXJsX2xsaXN0ICpwaXBlbGluZSwgYm9vbCBwaXBlX2Jyb2tlKTsKIAotI2lmZGVmIENVUkxfRElTQUJMRV9WRVJCT1NFX1NUUklOR1MKLSNkZWZpbmUgdmVyYm9zZWNvbm5lY3QoeCkgIGRvIHsgfSB3aGlsZSAoMCkKLSNlbmRpZgotCi0KIC8qCiAgKiBQcm90b2NvbCB0YWJsZS4KICAqLwpAQCAtMTg3LDExICsxODQsMTEgQEAKIAogI2lmbmRlZiBDVVJMX0RJU0FCTEVfTERBUAogICAmQ3VybF9oYW5kbGVyX2xkYXAsCi0jZW5kaWYKLQotI2lmICFkZWZpbmVkKENVUkxfRElTQUJMRV9MREFQKSAmJiBkZWZpbmVkKEhBVkVfTERBUF9TU0wpCisjaWYgKGRlZmluZWQoVVNFX09QRU5MREFQKSAmJiBkZWZpbmVkKFVTRV9TU0wpKSB8fCBcCisgICAoIWRlZmluZWQoVVNFX09QRU5MREFQKSAmJiBkZWZpbmVkKEhBVkVfTERBUF9TU0wpKQogICAmQ3VybF9oYW5kbGVyX2xkYXBzLAogI2VuZGlmCisjZW5kaWYKIAogI2lmbmRlZiBDVVJMX0RJU0FCTEVfRklMRQogICAmQ3VybF9oYW5kbGVyX2ZpbGUsCkBAIC0yMzEsNiArMjI4LDE5IEBACiAgICZDdXJsX2hhbmRsZXJfcnRzcCwKICNlbmRpZgogCisjaWZuZGVmIENVUkxfRElTQUJMRV9HT1BIRVIKKyAgJkN1cmxfaGFuZGxlcl9nb3BoZXIsCisjZW5kaWYKKworI2lmZGVmIFVTRV9MSUJSVE1QCisgICZDdXJsX2hhbmRsZXJfcnRtcCwKKyAgJkN1cmxfaGFuZGxlcl9ydG1wdCwKKyAgJkN1cmxfaGFuZGxlcl9ydG1wZSwKKyAgJkN1cmxfaGFuZGxlcl9ydG1wdGUsCisgICZDdXJsX2hhbmRsZXJfcnRtcHMsCisgICZDdXJsX2hhbmRsZXJfcnRtcHRzLAorI2VuZGlmCisKICAgKHN0cnVjdCBDdXJsX2hhbmRsZXIgKikgTlVMTAogfTsKIApAQCAtNDcxLDEwICs0ODEsMjAgQEAKICAgfQogI2VuZGlmCiAKKyAgQ3VybF9leHBpcmUoZGF0YSwgMCk7IC8qIHNodXQgb2ZmIHRpbWVycyAqLworCiAgIGlmKG0pCiAgICAgLyogVGhpcyBoYW5kbGUgaXMgc3RpbGwgcGFydCBvZiBhIG11bHRpIGhhbmRsZSwgdGFrZSBjYXJlIG9mIHRoaXMgZmlyc3QKICAgICAgICBhbmQgZGV0YWNoIHRoaXMgaGFuZGxlIGZyb20gdGhlcmUuICovCi0gICAgQ3VybF9tdWx0aV9ybWVhc3koZGF0YS0+bXVsdGksIGRhdGEpOworICAgIGN1cmxfbXVsdGlfcmVtb3ZlX2hhbmRsZShkYXRhLT5tdWx0aSwgZGF0YSk7CisKKyAgLyogRGVzdHJveSB0aGUgdGltZW91dCBsaXN0IHRoYXQgaXMgaGVsZCBpbiB0aGUgZWFzeSBoYW5kbGUuIEl0IGlzCisgICAgIC9ub3JtYWxseS8gZG9uZSBieSBjdXJsX211bHRpX3JlbW92ZV9oYW5kbGUoKSBidXQgdGhpcyBpcyAianVzdCBpbgorICAgICBjYXNlIiAqLworICBpZihkYXRhLT5zdGF0ZS50aW1lb3V0bGlzdCkgeworICAgIEN1cmxfbGxpc3RfZGVzdHJveShkYXRhLT5zdGF0ZS50aW1lb3V0bGlzdCwgTlVMTCk7CisgICAgZGF0YS0+c3RhdGUudGltZW91dGxpc3QgPSBOVUxMOworICB9CiAKICAgZGF0YS0+bWFnaWMgPSAwOyAvKiBmb3JjZSBhIGNsZWFyIEFGVEVSIHRoZSBwb3NzaWJseSBlbmZvcmNlZCByZW1vdmFsIGZyb20KICAgICAgICAgICAgICAgICAgICAgICB0aGUgbXVsdGkgaGFuZGxlLCBzaW5jZSB0aGF0IGZ1bmN0aW9uIHVzZXMgdGhlIG1hZ2ljCkBAIC02OTAsNiArNzEwLDggQEAKIAogICAvKiB1c2UgZnJlYWQgYXMgZGVmYXVsdCBmdW5jdGlvbiB0byByZWFkIGlucHV0ICovCiAgIHNldC0+ZnJlYWRfZnVuYyA9IChjdXJsX3JlYWRfY2FsbGJhY2spZnJlYWQ7CisgIHNldC0+aXNfZnJlYWRfc2V0ID0gMDsKKyAgc2V0LT5pc19md3JpdGVfc2V0ID0gMDsKIAogICBzZXQtPnNlZWtfZnVuYyA9IFpFUk9fTlVMTDsKICAgc2V0LT5zZWVrX2NsaWVudCA9IFpFUk9fTlVMTDsKQEAgLTc2Myw2ICs3ODUsMTAgQEAKICAgcmVzID0gc2V0c3Ryb3B0KCZzZXQtPnN0cltTVFJJTkdfU1NMX0NBUEFUSF0sIChjaGFyICopIENVUkxfQ0FfUEFUSCk7CiAjZW5kaWYKIAorICBzZXQtPndpbGRjYXJkbWF0Y2ggID0gRkFMU0U7CisgIHNldC0+Y2h1bmtfYmduICAgICAgPSBaRVJPX05VTEw7CisgIHNldC0+Y2h1bmtfZW5kICAgICAgPSBaRVJPX05VTEw7CisKICAgcmV0dXJuIHJlczsKIH0KIApAQCAtODMxLDYgKzg1Nyw5IEBACiAgICAgZGF0YS0+cHJvZ3Jlc3MuZmxhZ3MgfD0gUEdSU19ISURFOwogICAgIGRhdGEtPnN0YXRlLmN1cnJlbnRfc3BlZWQgPSAtMTsgLyogaW5pdCB0byBuZWdhdGl2ZSA9PSBpbXBvc3NpYmxlICovCiAKKyAgICBkYXRhLT53aWxkY2FyZC5zdGF0ZSA9IENVUkxXQ19JTklUOworICAgIGRhdGEtPndpbGRjYXJkLmZpbGVsaXN0ID0gTlVMTDsKKyAgICBkYXRhLT5zZXQuZm5tYXRjaCA9IFpFUk9fTlVMTDsKICAgICAvKiBUaGlzIG5vIGxvbmdlciBjcmVhdGVzIGEgY29ubmVjdGlvbiBjYWNoZSBoZXJlLiBJdCBpcyBpbnN0ZWFkIG1hZGUgb24KICAgICAgICB0aGUgZmlyc3QgY2FsbCB0byBjdXJsX2Vhc3lfcGVyZm9ybSgpIG9yIHdoZW4gdGhlIGhhbmRsZSBpcyBhZGRlZCB0byBhCiAgICAgICAgbXVsdGkgc3RhY2suICovCkBAIC0xMzkwLDE5ICsxNDE5LDYgQEAKICAgICBkYXRhLT5zZXQuaHR0cHZlcnNpb24gPSB2YV9hcmcocGFyYW0sIGxvbmcpOwogICAgIGJyZWFrOwogCi0gIGNhc2UgQ1VSTE9QVF9DVVNUT01SRVFVRVNUOgotICAgIC8qCi0gICAgICogU2V0IGEgY3VzdG9tIHN0cmluZyB0byB1c2UgYXMgcmVxdWVzdAotICAgICAqLwotICAgIHJlc3VsdCA9IHNldHN0cm9wdCgmZGF0YS0+c2V0LnN0cltTVFJJTkdfQ1VTVE9NUkVRVUVTVF0sCi0gICAgICAgICAgICAgICAgICAgICAgIHZhX2FyZyhwYXJhbSwgY2hhciAqKSk7Ci0KLSAgICAvKiB3ZSBkb24ndCBzZXQKLSAgICAgICBkYXRhLT5zZXQuaHR0cHJlcSA9IEhUVFBSRVFfQ1VTVE9NOwotICAgICAgIGhlcmUsIHdlIGNvbnRpbnVlIGFzIGlmIHdlIHdlcmUgdXNpbmcgdGhlIGFscmVhZHkgc2V0IHR5cGUKLSAgICAgICBhbmQgdGhpcyBqdXN0IGNoYW5nZXMgdGhlIGFjdHVhbCByZXF1ZXN0IGtleXdvcmQgKi8KLSAgICBicmVhazsKLQogICBjYXNlIENVUkxPUFRfSFRUUEFVVEg6CiAgICAgLyoKICAgICAgKiBTZXQgSFRUUCBBdXRoZW50aWNhdGlvbiB0eXBlIEJJVE1BU0suCkBAIC0xNDM0LDYgKzE0NTAsMjEgQEAKICAgfQogICBicmVhazsKIAorI2VuZGlmICAgLyogQ1VSTF9ESVNBQkxFX0hUVFAgKi8KKworICBjYXNlIENVUkxPUFRfQ1VTVE9NUkVRVUVTVDoKKyAgICAvKgorICAgICAqIFNldCBhIGN1c3RvbSBzdHJpbmcgdG8gdXNlIGFzIHJlcXVlc3QKKyAgICAgKi8KKyAgICByZXN1bHQgPSBzZXRzdHJvcHQoJmRhdGEtPnNldC5zdHJbU1RSSU5HX0NVU1RPTVJFUVVFU1RdLAorICAgICAgICAgICAgICAgICAgICAgICB2YV9hcmcocGFyYW0sIGNoYXIgKikpOworCisgICAgLyogd2UgZG9uJ3Qgc2V0CisgICAgICAgZGF0YS0+c2V0Lmh0dHByZXEgPSBIVFRQUkVRX0NVU1RPTTsKKyAgICAgICBoZXJlLCB3ZSBjb250aW51ZSBhcyBpZiB3ZSB3ZXJlIHVzaW5nIHRoZSBhbHJlYWR5IHNldCB0eXBlCisgICAgICAgYW5kIHRoaXMganVzdCBjaGFuZ2VzIHRoZSBhY3R1YWwgcmVxdWVzdCBrZXl3b3JkICovCisgICAgYnJlYWs7CisKICNpZm5kZWYgQ1VSTF9ESVNBQkxFX1BST1hZCiAgIGNhc2UgQ1VSTE9QVF9IVFRQUFJPWFlUVU5ORUw6CiAgICAgLyoKQEAgLTE0NzgsNyArMTUwOSw2IEBACiAgICAgZGF0YS0+c2V0LnByb3h5YXV0aCA9IGF1dGg7CiAgIH0KICAgYnJlYWs7Ci0jZW5kaWYgICAvKiBDVVJMX0RJU0FCTEVfSFRUUCAqLwogCiAgIGNhc2UgQ1VSTE9QVF9QUk9YWToKICAgICAvKgpAQCAtMTUxOCw3ICsxNTQ4LDcgQEAKICAgICAgIGJyZWFrOwogICAgIH0KICAgICBicmVhazsKLSNlbmRpZgorI2VuZGlmICAgLyogQ1VSTF9ESVNBQkxFX1BST1hZICovCiAKICNpZiBkZWZpbmVkKEhBVkVfR1NTQVBJKSB8fCBkZWZpbmVkKFVTRV9XSU5ET1dTX1NTUEkpCiAgIGNhc2UgQ1VSTE9QVF9TT0NLUzVfR1NTQVBJX1NFUlZJQ0U6CkBAIC0xODI1LDE4ICsxODU1LDI2IEBACiAgICAgICogU2V0IGRhdGEgd3JpdGUgY2FsbGJhY2sKICAgICAgKi8KICAgICBkYXRhLT5zZXQuZndyaXRlX2Z1bmMgPSB2YV9hcmcocGFyYW0sIGN1cmxfd3JpdGVfY2FsbGJhY2spOwotICAgIGlmKCFkYXRhLT5zZXQuZndyaXRlX2Z1bmMpCisgICAgaWYoIWRhdGEtPnNldC5md3JpdGVfZnVuYykgeworICAgICAgZGF0YS0+c2V0LmlzX2Z3cml0ZV9zZXQgPSAwOwogICAgICAgLyogV2hlbiBzZXQgdG8gTlVMTCwgcmVzZXQgdG8gb3VyIGludGVybmFsIGRlZmF1bHQgZnVuY3Rpb24gKi8KICAgICAgIGRhdGEtPnNldC5md3JpdGVfZnVuYyA9IChjdXJsX3dyaXRlX2NhbGxiYWNrKWZ3cml0ZTsKKyAgICB9CisgICAgZWxzZQorICAgICAgZGF0YS0+c2V0LmlzX2Z3cml0ZV9zZXQgPSAxOwogICAgIGJyZWFrOwogICBjYXNlIENVUkxPUFRfUkVBREZVTkNUSU9OOgogICAgIC8qCiAgICAgICogUmVhZCBkYXRhIGNhbGxiYWNrCiAgICAgICovCiAgICAgZGF0YS0+c2V0LmZyZWFkX2Z1bmMgPSB2YV9hcmcocGFyYW0sIGN1cmxfcmVhZF9jYWxsYmFjayk7Ci0gICAgaWYoIWRhdGEtPnNldC5mcmVhZF9mdW5jKQorICAgIGlmKCFkYXRhLT5zZXQuZnJlYWRfZnVuYykgeworICAgICAgZGF0YS0+c2V0LmlzX2ZyZWFkX3NldCA9IDA7CiAgICAgICAvKiBXaGVuIHNldCB0byBOVUxMLCByZXNldCB0byBvdXIgaW50ZXJuYWwgZGVmYXVsdCBmdW5jdGlvbiAqLwogICAgICAgZGF0YS0+c2V0LmZyZWFkX2Z1bmMgPSAoY3VybF9yZWFkX2NhbGxiYWNrKWZyZWFkOworICAgIH0KKyAgICBlbHNlCisgICAgICBkYXRhLT5zZXQuaXNfZnJlYWRfc2V0ID0gMTsKICAgICBicmVhazsKICAgY2FzZSBDVVJMT1BUX1NFRUtGVU5DVElPTjoKICAgICAvKgpAQCAtMjQ0MCw2ICsyNDc4LDI1IEBACiAgICAgLyogU2V0IHRoZSB1c2VyIGRlZmluZWQgUlRQIHdyaXRlIGZ1bmN0aW9uICovCiAgICAgZGF0YS0+c2V0LmZ3cml0ZV9ydHAgPSB2YV9hcmcocGFyYW0sIGN1cmxfd3JpdGVfY2FsbGJhY2spOwogICAgIGJyZWFrOworCisgIGNhc2UgQ1VSTE9QVF9XSUxEQ0FSRE1BVENIOgorICAgIGRhdGEtPnNldC53aWxkY2FyZG1hdGNoID0gKGJvb2wpKDAgIT0gdmFfYXJnKHBhcmFtLCBsb25nKSk7CisgICAgYnJlYWs7CisgIGNhc2UgQ1VSTE9QVF9DSFVOS19CR05fRlVOQ1RJT046CisgICAgZGF0YS0+c2V0LmNodW5rX2JnbiA9IHZhX2FyZyhwYXJhbSwgY3VybF9jaHVua19iZ25fY2FsbGJhY2spOworICAgIGJyZWFrOworICBjYXNlIENVUkxPUFRfQ0hVTktfRU5EX0ZVTkNUSU9OOgorICAgIGRhdGEtPnNldC5jaHVua19lbmQgPSB2YV9hcmcocGFyYW0sIGN1cmxfY2h1bmtfZW5kX2NhbGxiYWNrKTsKKyAgICBicmVhazsKKyAgY2FzZSBDVVJMT1BUX0ZOTUFUQ0hfRlVOQ1RJT046CisgICAgZGF0YS0+c2V0LmZubWF0Y2ggPSB2YV9hcmcocGFyYW0sIGN1cmxfZm5tYXRjaF9jYWxsYmFjayk7CisgICAgYnJlYWs7CisgIGNhc2UgQ1VSTE9QVF9DSFVOS19EQVRBOgorICAgIGRhdGEtPndpbGRjYXJkLmN1c3RvbXB0ciA9IHZhX2FyZyhwYXJhbSwgdm9pZCAqKTsKKyAgICBicmVhazsKKyAgY2FzZSBDVVJMT1BUX0ZOTUFUQ0hfREFUQToKKyAgICBkYXRhLT5zZXQuZm5tYXRjaF9kYXRhID0gdmFfYXJnKHBhcmFtLCB2b2lkICopOworICAgIGJyZWFrOwogICBkZWZhdWx0OgogICAgIC8qIHVua25vd24gdGFnIGFuZCBpdHMgY29tcGFuaW9uLCBqdXN0IGlnbm9yZTogKi8KICAgICByZXN1bHQgPSBDVVJMRV9GQUlMRURfSU5JVDsgLyogY29ycmVjdCB0aGlzICovCkBAIC0yNTI0LDcgKzI1ODEsNiBAQAogICAgICAgICAgICAgICAgICAgTlVMTCwgQ3VybF9zY2FuX2NhY2hlX3VzZWQpOwogI2VuZGlmCiAKLSAgQ3VybF9leHBpcmUoZGF0YSwgMCk7IC8qIHNodXQgb2ZmIHRpbWVycyAqLwogICBDdXJsX2hvc3RjYWNoZV9wcnVuZShkYXRhKTsgLyoga2lsbCBvbGQgRE5TIGNhY2hlIGVudHJpZXMgKi8KIAogICB7CkBAIC0yNjQzLDExICsyNjk5LDEwIEBACiAgIH0KICAgZWxzZSBpZiAoc3ZhbCAmIENVUkxfQ1NFTEVDVF9JTikgewogICAgIC8qIHJlYWRhYmxlIHdpdGggbm8gZXJyb3IuIGNvdWxkIGJlIGNsb3NlZCBvciBjb3VsZCBiZSBhbGl2ZSAqLwotICAgIGxvbmcgY29ubmVjdGluZm8gPSAwOwotICAgIEN1cmxfZ2V0Y29ubmVjdGluZm8oY2hlY2stPmRhdGEsICZjb25uZWN0aW5mbywgJmNoZWNrKTsKLSAgICBpZihjb25uZWN0aW5mbyAhPSAtMSkgeworICAgIGN1cmxfc29ja2V0X3QgY29ubmVjdGluZm8gPQorICAgICAgQ3VybF9nZXRjb25uZWN0aW5mbyhjaGVjay0+ZGF0YSwgJmNoZWNrKTsKKyAgICBpZihjb25uZWN0aW5mbyAhPSBDVVJMX1NPQ0tFVF9CQUQpCiAgICAgICByZXRfdmFsID0gRkFMU0U7Ci0gICAgfQogICB9CiAKICAgcmV0dXJuIHJldF92YWw7CkBAIC0zMDg1LDcgKzMxNDAsNyBAQAogLyogYWZ0ZXIgYSBUQ1AgY29ubmVjdGlvbiB0byB0aGUgcHJveHkgaGFzIGJlZW4gdmVyaWZpZWQsIHRoaXMgZnVuY3Rpb24gZG9lcwogICAgdGhlIG5leHQgbWFnaWMgc3RlcC4KIAotICAgTm90ZTogdGhpcyBmdW5jdGlvbiAoYW5kIGl0cyBzdWItZnVuY3Rpb25zKSBjYWxscyBmYWlsZigpCisgICBOb3RlOiB0aGlzIGZ1bmN0aW9uJ3Mgc3ViLWZ1bmN0aW9ucyBjYWxsIGZhaWxmKCkKIAogKi8KIENVUkxjb2RlIEN1cmxfY29ubmVjdGVkX3Byb3h5KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubikKQEAgLTMwOTMsMTIgKzMxNDgsNiBAQAogICBDVVJMY29kZSByZXN1bHQgPSBDVVJMRV9PSzsKICAgc3RydWN0IFNlc3Npb25IYW5kbGUgKmRhdGEgPSBjb25uLT5kYXRhOwogCi0gIGlmKGNvbm4tPmJpdHMudGNwY29ubmVjdCkKLSAgICAvKiBhbGxvdyB0aGlzIHRvIGdldCBjYWxsZWQgYWdhaW4gZnJvbSB0aGUgbXVsdGkgaW50ZXJmYWNlIHdoZW4gVENQIGlzCi0gICAgICAgZm91bmQgY29ubmVjdGVkIGluIHRoZSBzdGF0ZSBtYWNoaW5lLCBldmVuIHRob3VnaCBpdCBoYXMgYWxyZWFkeSBiZWVuCi0gICAgICAgY2FsbGVkIGlmIHRoZSBjb25uZWN0aW9uIGhhcHBlbmVkICJpbnN0YW50bHkiICovCi0gICAgcmV0dXJuIENVUkxFX09LOwotCiAgIHN3aXRjaChkYXRhLT5zZXQucHJveHl0eXBlKSB7CiAjaWZuZGVmIENVUkxfRElTQUJMRV9QUk9YWQogICBjYXNlIENVUkxQUk9YWV9TT0NLUzU6CkBAIC0zMTY5LDExICszMjE4LDEyIEBACiAgKiB2ZXJib3NlY29ubmVjdCgpIGRpc3BsYXlzIHZlcmJvc2UgaW5mb3JtYXRpb24gYWZ0ZXIgYSBjb25uZWN0CiAgKi8KICNpZm5kZWYgQ1VSTF9ESVNBQkxFX1ZFUkJPU0VfU1RSSU5HUwotc3RhdGljIHZvaWQgdmVyYm9zZWNvbm5lY3Qoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uKQordm9pZCBDdXJsX3ZlcmJvc2Vjb25uZWN0KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubikKIHsKLSAgaW5mb2YoY29ubi0+ZGF0YSwgIkNvbm5lY3RlZCB0byAlcyAoJXMpIHBvcnQgJWxkICgjJWxkKVxuIiwKLSAgICAgICAgY29ubi0+Yml0cy5wcm94eSA/IGNvbm4tPnByb3h5LmRpc3BuYW1lIDogY29ubi0+aG9zdC5kaXNwbmFtZSwKLSAgICAgICAgY29ubi0+aXBfYWRkcl9zdHIsIGNvbm4tPnBvcnQsIGNvbm4tPmNvbm5lY3RpbmRleCk7CisgIGlmKGNvbm4tPmRhdGEtPnNldC52ZXJib3NlKQorICAgIGluZm9mKGNvbm4tPmRhdGEsICJDb25uZWN0ZWQgdG8gJXMgKCVzKSBwb3J0ICVsZCAoIyVsZClcbiIsCisgICAgICAgICAgY29ubi0+Yml0cy5wcm94eSA/IGNvbm4tPnByb3h5LmRpc3BuYW1lIDogY29ubi0+aG9zdC5kaXNwbmFtZSwKKyAgICAgICAgICBjb25uLT5pcF9hZGRyX3N0ciwgY29ubi0+cG9ydCwgY29ubi0+Y29ubmVjdGluZGV4KTsKIH0KICNlbmRpZgogCkBAIC0zMjY0LDkgKzMzMTQsNyBAQAogICBpZighY29ubi0+Yml0cy50Y3Bjb25uZWN0KSB7CiAKICAgICBDdXJsX3BncnNUaW1lKGRhdGEsIFRJTUVSX0NPTk5FQ1QpOyAvKiBjb25uZWN0IGRvbmUgKi8KLQotICAgIGlmKGRhdGEtPnNldC52ZXJib3NlKQotICAgICAgdmVyYm9zZWNvbm5lY3QoY29ubik7CisgICAgQ3VybF92ZXJib3NlY29ubmVjdChjb25uKTsKICAgfQogCiAgIGlmKCFjb25uLT5iaXRzLnByb3RvY29ubnN0YXJ0KSB7CkBAIC00MTMzLDcgKzQxODEsNyBAQAogICAgICAqIHNldCB1c2VyL3Bhc3N3ZCwgYnV0IGRvaW5nIHRoYXQgZmlyc3QgYWRkcyBtb3JlIGNhc2VzIGhlcmUgOi0oCiAgICAgICovCiAKLSAgICBjb25uLT5iaXRzLnVzZXJwd2RfaW5fdXJsID0gMTsKKyAgICBjb25uLT5iaXRzLnVzZXJwd2RfaW5fdXJsID0gVFJVRTsKICAgICBpZihkYXRhLT5zZXQudXNlX25ldHJjICE9IENVUkxfTkVUUkNfUkVRVUlSRUQpIHsKICAgICAgIC8qIFdlIGNvdWxkIHVzZSB0aGUgb25lIGluIHRoZSBVUkwgKi8KIApAQCAtNDIyNCwxOCArNDI3MiwyMyBAQAogICAgIGlmKGNvbm4tPmJpdHMuaHR0cHByb3h5KSB7CiAgICAgICAvKiB3ZSBuZWVkIHRvIGNyZWF0ZSBuZXcgVVJMIHdpdGggdGhlIG5ldyBwb3J0IG51bWJlciAqLwogICAgICAgY2hhciAqdXJsOwotICAgICAgLyogRlRQUyBjb25uZWN0aW9ucyBoYXZlIHRoZSBGVFAgYml0IHNldCB0b28sIHNvIHRoZXkgbWF0Y2ggYXMgd2VsbCAqLwotICAgICAgYm9vbCBpc2Z0cCA9IChib29sKSgwICE9IChjb25uLT5wcm90b2NvbCAmIFBST1RfRlRQKSk7CisgICAgICBjaGFyIHR5cGVbMTJdPSIiOworCisgICAgICBpZihjb25uLT5iaXRzLnR5cGVfc2V0KQorICAgICAgICBzbnByaW50Zih0eXBlLCBzaXplb2YodHlwZSksICI7dHlwZT0lYyIsCisgICAgICAgICAgICAgICAgIGRhdGEtPnNldC5wcmVmZXJfYXNjaWk/J0EnOgorICAgICAgICAgICAgICAgICAoZGF0YS0+c2V0LmZ0cF9saXN0X29ubHk/J0QnOidJJykpOwogCiAgICAgICAvKgotICAgICAgICogVGhpcyBzeW50aGVzaXplZCBVUkwgaXNuJ3QgYWx3YXlzIHJpZ2h0LS1zdWZmaXhlcyBsaWtlIDt0eXBlPUEKLSAgICAgICAqIGFyZSBzdHJpcHBlZCBvZmYuIEl0IHdvdWxkIGJlIGJldHRlciB0byB3b3JrIGRpcmVjdGx5IGZyb20gdGhlCi0gICAgICAgKiBvcmlnaW5hbCBVUkwgYW5kIHNpbXBseSByZXBsYWNlIHRoZSBwb3J0IHBhcnQgb2YgaXQuCisgICAgICAgKiBUaGlzIHN5bnRoZXNpemVkIFVSTCBpc24ndCBhbHdheXMgcmlnaHQtLXN1ZmZpeGVzIGxpa2UgO3R5cGU9QSBhcmUKKyAgICAgICAqIHN0cmlwcGVkIG9mZi4gSXQgd291bGQgYmUgYmV0dGVyIHRvIHdvcmsgZGlyZWN0bHkgZnJvbSB0aGUgb3JpZ2luYWwKKyAgICAgICAqIFVSTCBhbmQgc2ltcGx5IHJlcGxhY2UgdGhlIHBvcnQgcGFydCBvZiBpdC4KICAgICAgICAqLwotICAgICAgdXJsID0gYXByaW50ZigiJXM6Ly8lcyVzJXM6JWh1JXMlcyIsIGNvbm4tPmhhbmRsZXItPnNjaGVtZSwKKyAgICAgIHVybCA9IGFwcmludGYoIiVzOi8vJXMlcyVzOiVodSVzJXMlcyIsIGNvbm4tPmhhbmRsZXItPnNjaGVtZSwKICAgICAgICAgICAgICAgICAgICAgY29ubi0+Yml0cy5pcHY2X2lwPyJbIjoiIiwgY29ubi0+aG9zdC5uYW1lLAogICAgICAgICAgICAgICAgICAgICBjb25uLT5iaXRzLmlwdjZfaXA/Il0iOiIiLCBjb25uLT5yZW1vdGVfcG9ydCwKLSAgICAgICAgICAgICAgICAgICAgaXNmdHA/Ii8iOiIiLCBkYXRhLT5zdGF0ZS5wYXRoKTsKKyAgICAgICAgICAgICAgICAgICAgZGF0YS0+c3RhdGUuc2xhc2hfcmVtb3ZlZD8iLyI6IiIsIGRhdGEtPnN0YXRlLnBhdGgsCisgICAgICAgICAgICAgICAgICAgIHR5cGUpOwogICAgICAgaWYoIXVybCkKICAgICAgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CiAKQEAgLTQyNjcsNiArNDMyMCwxMSBAQAogICAgICAgKnBvcnRwdHIgPSAnXDAnOyAvKiBjdXQgb2ZmIHRoZSBuYW1lIHRoZXJlICovCiAgICAgICBjb25uLT5yZW1vdGVfcG9ydCA9IGN1cmx4X3VsdG91cyhwb3J0KTsKICAgICB9CisgICAgZWxzZSBpZighcG9ydCkKKyAgICAgIC8qIEJyb3dzZXIgYmVoYXZpb3IgYWRhcHRhdGlvbi4gSWYgdGhlcmUncyBhIGNvbG9uIHdpdGggbm8gZGlnaXRzIGFmdGVyLAorICAgICAgICAganVzdCBjdXQgb2ZmIHRoZSBuYW1lIHRoZXJlIHdoaWNoIG1ha2VzIHVzIGlnbm9yZSB0aGUgY29sb24gYW5kIGp1c3QKKyAgICAgICAgIHVzZSB0aGUgZGVmYXVsdCBwb3J0LiBGaXJlZm94IGFuZCBDaHJvbWUgYm90aCBkbyB0aGF0LiAqLworICAgICAgKnBvcnRwdHIgPSAnXDAnOwogICB9CiAgIHJldHVybiBDVVJMRV9PSzsKIH0KQEAgLTQzNDcsMzAgKzQ0MDUsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgKmFzeW5jKQogewogICBDVVJMY29kZSByZXN1bHQ9Q1VSTEVfT0s7Ci0gIGxvbmcgc2hvcnRlc3QgPSAwOyAvKiBkZWZhdWx0IHRvIG5vIHRpbWVvdXQgKi8KLQotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICAgKiBTZXQgdGltZW91dCBpZiB0aGF0IGlzIGJlaW5nIHVzZWQKLSAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIGlmKGRhdGEtPnNldC50aW1lb3V0IHx8IGRhdGEtPnNldC5jb25uZWN0dGltZW91dCkgewotCi0gICAgLyogV2Ugc2V0IHRoZSB0aW1lb3V0IG9uIHRoZSBuYW1lIHJlc29sdmluZyBwaGFzZSBmaXJzdCwgc2VwYXJhdGVseSBmcm9tCi0gICAgICogdGhlIGRvd25sb2FkL3VwbG9hZCBwYXJ0IHRvIGFsbG93IGEgbWF4aW11bSB0aW1lIG9uIGV2ZXJ5dGhpbmcuIFRoaXMgaXMKLSAgICAgKiBhIHNpZ25hbC1iYXNlZCB0aW1lb3V0LCB3aHkgaXQgd29uJ3Qgd29yayBhbmQgc2hvdWxkbid0IGJlIHVzZWQgaW4KLSAgICAgKiBtdWx0aS10aHJlYWRlZCBlbnZpcm9ubWVudHMuICovCi0KLSAgICBzaG9ydGVzdCA9IGRhdGEtPnNldC50aW1lb3V0OyAvKiBkZWZhdWx0IHRvIHRoaXMgdGltZW91dCB2YWx1ZSAqLwotICAgIGlmKHNob3J0ZXN0ICYmIGRhdGEtPnNldC5jb25uZWN0dGltZW91dCAmJgotICAgICAgIChkYXRhLT5zZXQuY29ubmVjdHRpbWVvdXQgPCBzaG9ydGVzdCkpCi0gICAgICAvKiBpZiBib3RoIGFyZSBzZXQsIHBpY2sgdGhlIHNob3J0ZXN0ICovCi0gICAgICBzaG9ydGVzdCA9IGRhdGEtPnNldC5jb25uZWN0dGltZW91dDsKLSAgICBlbHNlIGlmKCFzaG9ydGVzdCkKLSAgICAgIC8qIGlmIHRpbWVvdXQgaXMgbm90IHNldCwgdXNlIHRoZSBjb25uZWN0IHRpbWVvdXQgKi8KLSAgICAgIHNob3J0ZXN0ID0gZGF0YS0+c2V0LmNvbm5lY3R0aW1lb3V0OwotICAvKiBXZSBjYW4gZXhwZWN0IHRoZSBjb25uLT5jcmVhdGVkIHRpbWUgdG8gYmUgIm5vdyIsIGFzIHRoYXQgd2FzIGp1c3QKLSAgICAgcmVjZW50bHkgc2V0IGluIHRoZSBiZWdpbm5pbmcgb2YgdGhpcyBmdW5jdGlvbiBhbmQgbm90aGluZyBzbG93Ci0gICAgIGhhcyBiZWVuIGRvbmUgc2luY2UgdGhlbiB1bnRpbCBub3cuICovCi0gIH0KKyAgbG9uZyB0aW1lb3V0X21zID0gQ3VybF90aW1lbGVmdChjb25uLCBOVUxMLCBUUlVFKTsKIAogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAgKiBSZXNvbHZlIHRoZSBuYW1lIG9mIHRoZSBzZXJ2ZXIgb3IgcHJveHkKQEAgLTQzOTcsNyArNDQzMiw3IEBACiAKICAgICAgIC8qIFJlc29sdmUgdGFyZ2V0IGhvc3QgcmlnaHQgb24gKi8KICAgICAgIHJjID0gQ3VybF9yZXNvbHZfdGltZW91dChjb25uLCBjb25uLT5ob3N0Lm5hbWUsIChpbnQpY29ubi0+cG9ydCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaG9zdGFkZHIsIHNob3J0ZXN0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaG9zdGFkZHIsIHRpbWVvdXRfbXMpOwogICAgICAgaWYocmMgPT0gQ1VSTFJFU09MVl9QRU5ESU5HKQogICAgICAgICAqYXN5bmMgPSBUUlVFOwogCkBAIC00NDE4LDcgKzQ0NTMsNyBAQAogCiAgICAgICAvKiByZXNvbHZlIHByb3h5ICovCiAgICAgICByYyA9IEN1cmxfcmVzb2x2X3RpbWVvdXQoY29ubiwgY29ubi0+cHJveHkubmFtZSwgKGludCljb25uLT5wb3J0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZob3N0YWRkciwgc2hvcnRlc3QpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZob3N0YWRkciwgdGltZW91dF9tcyk7CiAKICAgICAgIGlmKHJjID09IENVUkxSRVNPTFZfUEVORElORykKICAgICAgICAgKmFzeW5jID0gVFJVRTsKQEAgLTQ3MDcsNyArNDc0Miw3IEBACiAgICAgcHJveHkgPSBOVUxMOwogICB9CiAgIC8qIHByb3h5IG11c3QgYmUgZnJlZWQgbGF0ZXIgdW5sZXNzIE5VTEwgKi8KLSAgaWYocHJveHkgJiYgKnByb3h5KSB7CisgIGlmKHByb3h5KSB7CiAgICAgbG9uZyBiaXRzID0gY29ubi0+cHJvdG9jb2wgJiAoUFJPVF9IVFRQU3xQUk9UX1NTTCk7CiAKICAgICBpZigoY29ubi0+cHJveHl0eXBlID09IENVUkxQUk9YWV9IVFRQKSB8fApAQCAtNDc1MCw2ICs0Nzg1LDExIEBACiAgICAgcmV0dXJuIHJlc3VsdDsKICAgfQogCisgIGNvbm4tPnJlY3ZbRklSU1RTT0NLRVRdID0gQ3VybF9yZWN2X3BsYWluOworICBjb25uLT5zZW5kW0ZJUlNUU09DS0VUXSA9IEN1cmxfc2VuZF9wbGFpbjsKKyAgY29ubi0+cmVjdltTRUNPTkRBUllTT0NLRVRdID0gQ3VybF9yZWN2X3BsYWluOworICBjb25uLT5zZW5kW1NFQ09OREFSWVNPQ0tFVF0gPSBDdXJsX3NlbmRfcGxhaW47CisKICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICAqIGZpbGU6IGlzIGEgc3BlY2lhbCBjYXNlIGluIHRoYXQgaXQgZG9lc24ndCBuZWVkIGEgbmV0d29yayBjb25uZWN0aW9uCiAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTQ3NzksOSArNDgxOSw4IEBACiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICB9CiAKLSAgICAgIHJlc3VsdCA9IEN1cmxfc2V0dXBfdHJhbnNmZXIoY29ubiwgLTEsIC0xLCBGQUxTRSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgLyogbm8gZG93bmxvYWQgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEsIE5VTEwpOyAvKiBubyB1cGxvYWQgKi8KKyAgICAgIEN1cmxfc2V0dXBfdHJhbnNmZXIoY29ubiwgLTEsIC0xLCBGQUxTRSwgTlVMTCwgLyogbm8gZG93bmxvYWQgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgLTEsIE5VTEwpOyAvKiBubyB1cGxvYWQgKi8KICAgICB9CiAKICAgICByZXR1cm4gcmVzdWx0OwpAQCAtNDk4Niw4ICs1MDI1LDggQEAKICAgICAgIEN1cmxfcGdyc1RpbWUoZGF0YSwgVElNRVJfQVBQQ09OTkVDVCk7IC8qIHdlJ3JlIGNvbm5lY3RlZCBhbHJlYWR5ICovCiAgICAgICBjb25uLT5iaXRzLnRjcGNvbm5lY3QgPSBUUlVFOwogICAgICAgKnByb3RvY29sX2RvbmUgPSBUUlVFOwotICAgICAgaWYoZGF0YS0+c2V0LnZlcmJvc2UpCi0gICAgICAgIHZlcmJvc2Vjb25uZWN0KGNvbm4pOworICAgICAgQ3VybF92ZXJib3NlY29ubmVjdChjb25uKTsKKyAgICAgIEN1cmxfdXBkYXRlY29ubmluZm8oY29ubiwgY29ubi0+c29ja1tGSVJTVFNPQ0tFVF0pOwogICAgIH0KICAgICAvKiBTdG9wIHRoZSBsb29wIG5vdyAqLwogICAgIGJyZWFrOwpAQCAtNTA5Myw4ICs1MTMyLDYgQEAKICAgY29ubiA9ICpjb25ucDsKICAgZGF0YSA9IGNvbm4tPmRhdGE7CiAKLSAgQ3VybF9leHBpcmUoZGF0YSwgMCk7IC8qIHN0b3AgdGltZXIgKi8KLQogICBpZihjb25uLT5iaXRzLmRvbmUpCiAgICAgLyogU3RvcCBpZiBDdXJsX2RvbmUoKSBoYXMgYWxyZWFkeSBiZWVuIGNhbGxlZCAqLwogICAgIHJldHVybiBDVVJMRV9PSzsKQEAgLTUyNDgsMTAgKzUyODUsOCBAQAogc3RhdGljIHZvaWQgZG9fY29tcGxldGUoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uKQogewogICBjb25uLT5kYXRhLT5yZXEuY2h1bms9RkFMU0U7Ci0gIGNvbm4tPmRhdGEtPnJlcS50cmFpbGVyaGRycHJlc2VudD1GQUxTRTsKLQogICBjb25uLT5kYXRhLT5yZXEubWF4ZmQgPSAoY29ubi0+c29ja2ZkPmNvbm4tPndyaXRlc29ja2ZkPwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbm4tPnNvY2tmZDpjb25uLT53cml0ZXNvY2tmZCkrMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbm4tPnNvY2tmZDpjb25uLT53cml0ZXNvY2tmZCkrMTsKIH0KIAogQ1VSTGNvZGUgQ3VybF9kbyhzdHJ1Y3QgY29ubmVjdGRhdGEgKipjb25ucCwgYm9vbCAqZG9uZSkKZGlmZiAtLWdpdCBhL2xpYi91cmwuaCBiL2xpYi91cmwuaAppbmRleCBjYjNkZDJmLi42M2Q3ZjJjIDEwMDY0NAotLS0gYS9saWIvdXJsLmgKKysrIGIvbGliL3VybC5oCkBAIC03LDcgKzcsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKLSAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMDksIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDEwLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCkBAIC04Niw0ICs4NiwxMSBAQAogCiBDVVJMY29kZSBDdXJsX2Nvbm5lY3RlZF9wcm94eShzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pOwogCisjaWZkZWYgQ1VSTF9ESVNBQkxFX1ZFUkJPU0VfU1RSSU5HUworI2RlZmluZSBDdXJsX3ZlcmJvc2Vjb25uZWN0KHgpICBkbyB7IH0gd2hpbGUgKDApCisjZWxzZQordm9pZCBDdXJsX3ZlcmJvc2Vjb25uZWN0KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubik7CisjZW5kaWYKKworCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYi91cmxkYXRhLmggYi9saWIvdXJsZGF0YS5oCmluZGV4IGFkMTcyZDYuLjRkNjA1OTEgMTAwNjQ0Ci0tLSBhL2xpYi91cmxkYXRhLmgKKysrIGIvbGliL3VybGRhdGEuaApAQCAtNDMsNiArNDMsMTAgQEAKICNkZWZpbmUgUE9SVF9TTVRQIDI1CiAjZGVmaW5lIFBPUlRfU01UUFMgNDY1IC8qIHNvbWV0aW1lcyBjYWxsZWQgU1NNVFAgKi8KICNkZWZpbmUgUE9SVF9SVFNQIDU1NAorI2RlZmluZSBQT1JUX1JUTVAgMTkzNQorI2RlZmluZSBQT1JUX1JUTVBUIFBPUlRfSFRUUAorI2RlZmluZSBQT1JUX1JUTVBTIFBPUlRfSFRUUFMKKyNkZWZpbmUgUE9SVF9HT1BIRVIgNzAKIAogI2RlZmluZSBESUNUX01BVENIICIvTUFUQ0g6IgogI2RlZmluZSBESUNUX01BVENIMiAiL006IgpAQCAtMTAyLDYgKzEwNiwxMSBAQAogI2luY2x1ZGUgPGdudXRscy9nbnV0bHMuaD4KICNlbmRpZgogCisjaWZkZWYgVVNFX1BPTEFSU1NMCisjaW5jbHVkZSA8cG9sYXJzc2wvaGF2ZWdlLmg+CisjaW5jbHVkZSA8cG9sYXJzc2wvc3NsLmg+CisjZW5kaWYKKwogI2lmZGVmIFVTRV9OU1MKICNpbmNsdWRlIDxuc3ByLmg+CiAjaW5jbHVkZSA8cGsxMXB1Yi5oPgpAQCAtMTQ4LDYgKzE1Nyw3IEBACiAjaW5jbHVkZSAic3NoLmgiCiAjaW5jbHVkZSAiaHR0cC5oIgogI2luY2x1ZGUgInJ0c3AuaCIKKyNpbmNsdWRlICJ3aWxkY2FyZC5oIgogCiAjaWZkZWYgSEFWRV9HU1NBUEkKICMgaWZkZWYgSEFWRV9HU1NHTlUKQEAgLTIzMSw3ICsyNDEsMTggQEAKICNpZmRlZiBVU0VfR05VVExTCiAgIGdudXRsc19zZXNzaW9uIHNlc3Npb247CiAgIGdudXRsc19jZXJ0aWZpY2F0ZV9jcmVkZW50aWFscyBjcmVkOworICBzc2xfY29ubmVjdF9zdGF0ZSBjb25uZWN0aW5nX3N0YXRlOwogI2VuZGlmIC8qIFVTRV9HTlVUTFMgKi8KKyNpZmRlZiBVU0VfUE9MQVJTU0wKKyAgaGF2ZWdlX3N0YXRlIGhzOworICBzc2xfY29udGV4dCBzc2w7CisgIHNzbF9zZXNzaW9uIHNzbjsKKyAgaW50IHNlcnZlcl9mZDsKKyAgeDUwOV9jZXJ0IGNhY2VydDsKKyAgeDUwOV9jZXJ0IGNsaWNlcnQ7CisgIHg1MDlfY3JsIGNybDsKKyAgcnNhX2NvbnRleHQgcnNhOworI2VuZGlmIC8qIFVTRV9QT0xBUlNTTCAqLwogI2lmZGVmIFVTRV9OU1MKICAgUFJGaWxlRGVzYyAqaGFuZGxlOwogICBjaGFyICpjbGllbnRfbmlja25hbWU7CkBAIC0zOTgsNiArNDE5LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhhdCBsaWJjdXJsIHNob3VsZCByZWNvbm5lY3QgYW5kIGNvbnRpbnVlLiAqLwogICBib29sIGJvdW5kOyAvKiBzZXQgdHJ1ZSBpZiBiaW5kKCkgaGFzIGFscmVhZHkgYmVlbiBkb25lIG9uIHRoaXMgc29ja2V0LwogICAgICAgICAgICAgICAgICBjb25uZWN0aW9uICovCisgIGJvb2wgdHlwZV9zZXQ7ICAvKiB0eXBlPSB3YXMgdXNlZCBpbiB0aGUgVVJMICovCiB9OwogCiBzdHJ1Y3QgaG9zdG5hbWUgewpAQCAtNTY3LDkgKzU4OSw2IEBACiAgIGJvb2wgZm9yYmlkY2h1bms7ICAgLyogdXNlZCBvbmx5IHRvIGV4cGxpY2l0bHkgZm9yYmlkIGNodW5rLXVwbG9hZCBmb3IKICAgICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWZpYyB1cGxvYWQgYnVmZmVycy4gU2VlIHJlYWRtb3JlZGF0YSgpIGluCiAgICAgICAgICAgICAgICAgICAgICAgICAgaHR0cC5jIGZvciBkZXRhaWxzLiAqLwotICBib29sIHRyYWlsZXJoZHJwcmVzZW50OyAvKiBTZXQgd2hlbiBUcmFpbGVyOiBoZWFkZXIgZm91bmQgaW4gSFRUUCByZXNwb25zZS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVxdWlyZWQgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdG8gbG9vayBmb3IgdHJhaWxlcnMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gY2FzZSBvZiBUcmFuc2Zlci1FbmNvZGluZzogY2h1bmtpbmcgKi8KIH07CiAKIC8qCkBAIC02MzIsNiArNjUxLDIwIEBACiAgIGxvbmcgcHJvdG9jb2w7ICAgICAgLyogUFJPVF8qIGZsYWdzIGNvbmNlcm5pbmcgdGhlIHByb3RvY29sIHNldCAqLwogfTsKIAorLyogcmV0dXJuIHRoZSBjb3VudCBvZiBieXRlcyBzZW50LCBvciAtMSBvbiBlcnJvciAqLwordHlwZWRlZiBzc2l6ZV90IChDdXJsX3NlbmQpKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgLyogY29ubmVjdGlvbiBkYXRhICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNvY2tpbmRleCwgICAgICAgICAgICAvKiBzb2NrZXRpbmRleCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKmJ1ZiwgICAgICAgICAgLyogZGF0YSB0byB3cml0ZSAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBsZW4sICAgICAgICAgICAgICAgLyogbWF4IGFtb3VudCB0byB3cml0ZSAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgIENVUkxjb2RlICplcnIpOyAgICAgICAgICAgLyogZXJyb3IgdG8gcmV0dXJuICovCisKKy8qIHJldHVybiB0aGUgY291bnQgb2YgYnl0ZXMgcmVhZCwgb3IgLTEgb24gZXJyb3IgKi8KK3R5cGVkZWYgc3NpemVfdCAoQ3VybF9yZWN2KShzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIC8qIGNvbm5lY3Rpb24gZGF0YSAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzb2NraW5kZXgsICAgICAgICAgICAgLyogc29ja2V0aW5kZXggKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpidWYsICAgICAgICAgICAgICAgIC8qIHN0b3JlIGRhdGEgaGVyZSAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBsZW4sICAgICAgICAgICAgICAgLyogbWF4IGFtb3VudCB0byByZWFkICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1VSTGNvZGUgKmVycik7ICAgICAgICAgICAvKiBlcnJvciB0byByZXR1cm4gKi8KKwogLyoKICAqIFRoZSBjb25uZWN0ZGF0YSBzdHJ1Y3QgY29udGFpbnMgYWxsIGZpZWxkcyBhbmQgdmFyaWFibGVzIHRoYXQgc2hvdWxkIGJlCiAgKiB1bmlxdWUgZm9yIGFuIGVudGlyZSBjb25uZWN0aW9uLgpAQCAtNjc0LDEzICs3MDcsMjEgQEAKICNkZWZpbmUgUFJPVF9TTVRQICAgIENVUkxQUk9UT19TTVRQCiAjZGVmaW5lIFBST1RfU01UUFMgICBDVVJMUFJPVE9fU01UUFMKICNkZWZpbmUgUFJPVF9SVFNQICAgIENVUkxQUk9UT19SVFNQCisjZGVmaW5lIFBST1RfUlRNUCAgICBDVVJMUFJPVE9fUlRNUAorI2RlZmluZSBQUk9UX1JUTVBUICAgQ1VSTFBST1RPX1JUTVBUCisjZGVmaW5lIFBST1RfUlRNUEUgICBDVVJMUFJPVE9fUlRNUEUKKyNkZWZpbmUgUFJPVF9SVE1QVEUgIENVUkxQUk9UT19SVE1QVEUKKyNkZWZpbmUgUFJPVF9SVE1QUyAgIENVUkxQUk9UT19SVE1QUworI2RlZmluZSBQUk9UX1JUTVBUUyAgQ1VSTFBST1RPX1JUTVBUUworI2RlZmluZSBQUk9UX0dPUEhFUiAgQ1VSTFBST1RPX0dPUEhFUgogCi0vKiAoMTw8MTgpIGlzIGN1cnJlbnRseSB0aGUgaGlnaGVzdCB1c2VkIGJpdCBpbiB0aGUgcHVibGljIGJpdG1hc2suIFdlIG1ha2UKLSAgIHN1cmUgd2UgdXNlICJwcml2YXRlIGJpdHMiIGFib3ZlIHRoZSBwdWJsaWMgb25lcyB0byBtYWtlIHRoaW5ncyBlYXNpZXIuICovCisvKiAoMTw8MjUpIGlzIGN1cnJlbnRseSB0aGUgaGlnaGVzdCB1c2VkIGJpdCBpbiB0aGUgcHVibGljIGJpdG1hc2suIFdlIG1ha2UKKyAgIHN1cmUgd2UgdXNlICJwcml2YXRlIGJpdHMiIGFib3ZlIHRoZSBwdWJsaWMgb25lcyB0byBtYWtlIHRoaW5ncyBlYXNpZXI7CisgICBHb3BoZXIgd2lsbCBub3QgY29uZmxpY3Qgd2l0aCB0aGUgY3VycmVudCBiaXQgMjUuICovCiAKLSNkZWZpbmUgUFJPVF9FWFRNQVNLIDB4ZmZmZmYKKyNkZWZpbmUgUFJPVF9FWFRNQVNLIDB4MDNmZmZmZmYKIAotI2RlZmluZSBQUk9UX1NTTCAgICAgKDE8PDI1KSAvKiBwcm90b2NvbCByZXF1aXJlcyBTU0wgKi8KKyNkZWZpbmUgUFJPVF9TU0wgICAgICgxPDwyOSkgLyogcHJvdG9jb2wgcmVxdWlyZXMgU1NMICovCiAKIC8qIHRoZXNlIG9uZXMgbmVlZCBhY3Rpb24gYmVmb3JlIHNvY2tldCBjbG9zZSAqLwogI2RlZmluZSBQUk9UX0NMT1NFQUNUSU9OIChQUk9UX0ZUUCB8IFBST1RfSU1BUCB8IFBST1RfUE9QMykKQEAgLTcyOCw2ICs3NjksOSBAQAogICBjdXJsX3NvY2tldF90IHNvY2tbMl07IC8qIHR3byBzb2NrZXRzLCB0aGUgc2Vjb25kIGlzIHVzZWQgZm9yIHRoZSBkYXRhCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmZXIgd2hlbiBkb2luZyBGVFAgKi8KIAorICBDdXJsX3JlY3YgKnJlY3ZbMl07CisgIEN1cmxfc2VuZCAqc2VuZFsyXTsKKwogICBzdHJ1Y3Qgc3NsX2Nvbm5lY3RfZGF0YSBzc2xbMl07IC8qIHRoaXMgaXMgZm9yIHNzbC1zdHVmZiAqLwogICBzdHJ1Y3Qgc3NsX2NvbmZpZ19kYXRhIHNzbF9jb25maWc7CiAKQEAgLTc2Miw3ICs4MDYsNyBAQAogICBlbnVtIHByb3RlY3Rpb25fbGV2ZWwgZGF0YV9wcm90OwogICBlbnVtIHByb3RlY3Rpb25fbGV2ZWwgcmVxdWVzdF9kYXRhX3Byb3Q7CiAgIHNpemVfdCBidWZmZXJfc2l6ZTsKLSAgc3RydWN0IGtyYjRidWZmZXIgaW5fYnVmZmVyLCBvdXRfYnVmZmVyOworICBzdHJ1Y3Qga3JiNGJ1ZmZlciBpbl9idWZmZXI7CiAgIHZvaWQgKmFwcF9kYXRhOwogICBjb25zdCBzdHJ1Y3QgQ3VybF9zZWNfY2xpZW50X21lY2ggKm1lY2g7CiAgIHN0cnVjdCBzb2NrYWRkcl9pbiBsb2NhbF9hZGRyOwpAQCAtODI5LDYgKzg3Myw3IEBACiAgICAgc3RydWN0IHBvcDNfY29ubiBwb3AzYzsKICAgICBzdHJ1Y3Qgc210cF9jb25uIHNtdHBjOwogICAgIHN0cnVjdCBydHNwX2Nvbm4gcnRzcGM7CisgICAgdm9pZCAqZ2VuZXJpYzsKICAgfSBwcm90bzsKIAogICBpbnQgY3NlbGVjdF9iaXRzOyAvKiBiaXRtYXNrIG9mIHNvY2tldCBldmVudHMgKi8KQEAgLTg2Nyw2ICs5MTIsMTIgQEAKICAgY2hhciBpcFtNQVhfSVBBRFJfTEVOXTsgLyogdGhpcyBidWZmZXIgZ2V0cyB0aGUgbnVtZXJpY2FsIGlwIHZlcnNpb24gc3RvcmVkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0IHRoZSBjb25uZWN0ICphdHRlbXB0KiBzbyBpdCB3aWxsIGdldCB0aGUgbGFzdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmllZCBjb25uZWN0IElQIGV2ZW4gb24gZmFpbHVyZXMgKi8KKyAgbG9uZyBwb3J0OyAvKiB0aGUgcmVtb3RlIHBvcnQgdGhlIGxhc3QgY29ubmVjdGlvbiB3YXMgZXN0YWJsaXNoZWQgdG8gKi8KKyAgY2hhciBsb2NhbGlwW01BWF9JUEFEUl9MRU5dOyAvKiB0aGlzIGJ1ZmZlciBnZXRzIHRoZSBudW1lcmljYWwgKGxvY2FsKSBpcAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JlZCBmcm9tIHdoZXJlIHRoZSBsYXN0IGNvbm5lY3Rpb24gd2FzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXN0YWJsaXNoZWQgKi8KKyAgbG9uZyBsb2NhbHBvcnQ7IC8qIHRoZSBsb2NhbCAoc3JjKSBwb3J0IHRoZSBsYXN0IGNvbm5lY3Rpb24KKyAgICAgICAgICAgICAgICAgICAgIG9yaWdpbmF0ZWQgZnJvbSAqLwogICBzdHJ1Y3QgY3VybF9jZXJ0aW5mbyBjZXJ0czsgLyogaW5mbyBhYm91dCB0aGUgY2VydHMsIG9ubHkgcG9wdWxhdGVkIGluCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcGVuU1NMIGJ1aWxkcy4gQXNrZWQgZm9yIHdpdGgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENVUkxPUFRfQ0VSVElORk8gLyBDVVJMSU5GT19DRVJUSU5GTyAqLwpAQCAtMTA0Myw2ICsxMDk0LDcgQEAKICNlbmRpZiAvKiBVU0VfU1NMRUFZICovCiAgIHN0cnVjdCB0aW1ldmFsIGV4cGlyZXRpbWU7IC8qIHNldCB0aGlzIHdpdGggQ3VybF9leHBpcmUoKSBvbmx5ICovCiAgIHN0cnVjdCBDdXJsX3RyZWUgdGltZW5vZGU7IC8qIGZvciB0aGUgc3BsYXkgc3R1ZmYgKi8KKyAgc3RydWN0IGN1cmxfbGxpc3QgKnRpbWVvdXRsaXN0OyAvKiBsaXN0IG9mIHBlbmRpbmcgdGltZW91dHMgKi8KIAogICAvKiBhIHBsYWNlIHRvIHN0b3JlIHRoZSBtb3N0IHJlY2VudGx5IHNldCBGVFAgZW50cnlwYXRoICovCiAgIGNoYXIgKm1vc3RfcmVjZW50X2Z0cF9lbnRyeXBhdGg7CkBAIC0xMDc3LDcgKzExMjksOCBAQAogICBjaGFyICpwYXRoYnVmZmVyOy8qIGFsbG9jYXRlZCBidWZmZXIgdG8gc3RvcmUgdGhlIFVSTCdzIHBhdGggcGFydCBpbiAqLwogICBjaGFyICpwYXRoOyAgICAgIC8qIHBhdGggdG8gdXNlLCBwb2ludHMgdG8gc29tZXdoZXJlIHdpdGhpbiB0aGUgcGF0aGJ1ZmZlcgogICAgICAgICAgICAgICAgICAgICAgIGFyZWEgKi8KLQorICBib29sIHNsYXNoX3JlbW92ZWQ7IC8qIHNldCBUUlVFIGlmIHRoZSAncGF0aCcgcG9pbnRzIHRvIGEgcGF0aCB3aGVyZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICBpbml0aWFsIFVSTCBzbGFzaCBzZXBhcmF0b3IgaGFzIGJlZW4gdGFrZW4gb2ZmICovCiAgIGJvb2wgdXNlX3JhbmdlOwogICBib29sIHJhbmdlc3RyaW5nYWxsb2M7IC8qIHRoZSByYW5nZSBzdHJpbmcgaXMgbWFsbG9jKCknZWQgKi8KIApAQCAtMTIzNCw2ICsxMjg3LDggQEAKICAgY3VybF93cml0ZV9jYWxsYmFjayBmd3JpdGVfaGVhZGVyOyAvKiBmdW5jdGlvbiB0aGF0IHN0b3JlcyBoZWFkZXJzICovCiAgIGN1cmxfd3JpdGVfY2FsbGJhY2sgZndyaXRlX3J0cDsgICAgLyogZnVuY3Rpb24gdGhhdCBzdG9yZXMgaW50ZXJsZWF2ZWQgUlRQICovCiAgIGN1cmxfcmVhZF9jYWxsYmFjayBmcmVhZF9mdW5jOyAgICAgLyogZnVuY3Rpb24gdGhhdCByZWFkcyB0aGUgaW5wdXQgKi8KKyAgaW50IGlzX2ZyZWFkX3NldDsgLyogYm9vbGVhbiwgaGFzIHJlYWQgY2FsbGJhY2sgYmVlbiBzZXQgdG8gbm9uLU5VTEw/ICovCisgIGludCBpc19md3JpdGVfc2V0OyAvKiBib29sZWFuLCBoYXMgd3JpdGUgY2FsbGJhY2sgYmVlbiBzZXQgdG8gbm9uLU5VTEw/ICovCiAgIGN1cmxfcHJvZ3Jlc3NfY2FsbGJhY2sgZnByb2dyZXNzOyAgLyogZnVuY3Rpb24gZm9yIHByb2dyZXNzIGluZm9ybWF0aW9uICovCiAgIGN1cmxfZGVidWdfY2FsbGJhY2sgZmRlYnVnOyAgICAgIC8qIGZ1bmN0aW9uIHRoYXQgd3JpdGUgaW5mb3JtYXRpb25hbCBkYXRhICovCiAgIGN1cmxfaW9jdGxfY2FsbGJhY2sgaW9jdGxfZnVuYzsgIC8qIGZ1bmN0aW9uIGZvciBJL08gY29udHJvbCAqLwpAQCAtMTM3Miw2ICsxNDI3LDEzIEBACiAgIC8qIENvbW1vbiBSVFNQIGhlYWRlciBvcHRpb25zICovCiAgIEN1cmxfUnRzcFJlcSBydHNwcmVxOyAvKiBSVFNQIHJlcXVlc3QgdHlwZSAqLwogICBsb25nIHJ0c3B2ZXJzaW9uOyAvKiBsaWtlIGh0dHB2ZXJzaW9uLCBmb3IgUlRTUCAqLworICBib29sIHdpbGRjYXJkbWF0Y2g7IC8qIGVuYWJsZSB3aWxkY2FyZCBtYXRjaGluZyAqLworICBjdXJsX2NodW5rX2Jnbl9jYWxsYmFjayBjaHVua19iZ247IC8qIGNhbGxlZCBiZWZvcmUgcGFydCBvZiB0cmFuc2ZlciBzdGFydHMgKi8KKyAgY3VybF9jaHVua19lbmRfY2FsbGJhY2sgY2h1bmtfZW5kOyAvKiBjYWxsZWQgYWZ0ZXIgcGFydCB0cmFuc2ZlcnJpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdG9wcGVkICovCisgIGN1cmxfZm5tYXRjaF9jYWxsYmFjayBmbm1hdGNoOyAvKiBjYWxsYmFjayB0byBkZWNpZGUgd2hpY2ggZmlsZSBjb3JyZXNwb25kcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gcGF0dGVybiAoZS5nLiBpZiBXSUxEQ0FSRE1BVENIIGlzIG9uKSAqLworICB2b2lkICpmbm1hdGNoX2RhdGE7CiB9OwogCiBzdHJ1Y3QgTmFtZXMgewpAQCAtMTQxMyw2ICsxNDc1LDcgQEAKICAgc3RydWN0IFByb2dyZXNzIHByb2dyZXNzOyAgICAvKiBmb3IgYWxsIHRoZSBwcm9ncmVzcyBtZXRlciBkYXRhICovCiAgIHN0cnVjdCBVcmxTdGF0ZSBzdGF0ZTsgICAgICAgLyogc3RydWN0IGZvciBmaWVsZHMgdXNlZCBmb3Igc3RhdGUgaW5mbyBhbmQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdGhlciBkeW5hbWljIHB1cnBvc2VzICovCisgIHN0cnVjdCBXaWxkY2FyZERhdGEgd2lsZGNhcmQ7IC8qIHdpbGRjYXJkIGRvd25sb2FkIHN0YXRlIGluZm8gKi8KICAgc3RydWN0IFB1cmVJbmZvIGluZm87ICAgICAgICAvKiBzdGF0cywgcmVwb3J0cyBhbmQgaW5mbyBkYXRhICovCiAjaWYgZGVmaW5lZChDVVJMX0RPRVNfQ09OVkVSU0lPTlMpICYmIGRlZmluZWQoSEFWRV9JQ09OVikKICAgaWNvbnZfdCBvdXRib3VuZF9jZDsgICAgICAgICAvKiBmb3IgdHJhbnNsYXRpbmcgdG8gdGhlIG5ldHdvcmsgZW5jb2RpbmcgKi8KZGlmZiAtLWdpdCBhL2xpYi92YzZsaWJjdXJsLmRzcCBiL2xpYi92YzZsaWJjdXJsLmRzcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZThmNmYxCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3ZjNmxpYmN1cmwuZHNwCkBAIC0wLDAgKzEsODYyIEBACisjIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIFByb2plY3QgRmlsZSAtIE5hbWU9ImxpYmN1cmwiIC0gUGFja2FnZSBPd25lcj08ND4NCisjIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIEdlbmVyYXRlZCBCdWlsZCBGaWxlLCBGb3JtYXQgVmVyc2lvbiA2LjAwDQorIyAqKiBETyBOT1QgRURJVCAqKg0KKw0KKyMgVEFSR1RZUEUgIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IiAweDAxMDINCisjIFRBUkdUWVBFICJXaW4zMiAoeDg2KSBTdGF0aWMgTGlicmFyeSIgMHgwMTA0DQorDQorQ0ZHPWxpYmN1cmwgLSBXaW4zMiBMSUIgRGVidWcNCishTUVTU0FHRSBUaGlzIGlzIG5vdCBhIHZhbGlkIG1ha2VmaWxlLiBUbyBidWlsZCB0aGlzIHByb2plY3QgdXNpbmcgTk1BS0UsDQorIU1FU1NBR0UgdXNlIHRoZSBFeHBvcnQgTWFrZWZpbGUgY29tbWFuZCBhbmQgcnVuDQorIU1FU1NBR0UgDQorIU1FU1NBR0UgTk1BS0UgL2YgImxpYmN1cmwubWFrIi4NCishTUVTU0FHRSANCishTUVTU0FHRSBZb3UgY2FuIHNwZWNpZnkgYSBjb25maWd1cmF0aW9uIHdoZW4gcnVubmluZyBOTUFLRQ0KKyFNRVNTQUdFIGJ5IGRlZmluaW5nIHRoZSBtYWNybyBDRkcgb24gdGhlIGNvbW1hbmQgbGluZS4gRm9yIGV4YW1wbGU6DQorIU1FU1NBR0UgDQorIU1FU1NBR0UgTk1BS0UgL2YgImxpYmN1cmwubWFrIiBDRkc9ImxpYmN1cmwgLSBXaW4zMiBMSUIgRGVidWciDQorIU1FU1NBR0UgDQorIU1FU1NBR0UgUG9zc2libGUgY2hvaWNlcyBmb3IgY29uZmlndXJhdGlvbiBhcmU6DQorIU1FU1NBR0UgDQorIU1FU1NBR0UgImxpYmN1cmwgLSBXaW4zMiBETEwgRGVidWciIChiYXNlZCBvbiAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiKQ0KKyFNRVNTQUdFICJsaWJjdXJsIC0gV2luMzIgRExMIFJlbGVhc2UiIChiYXNlZCBvbiAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiKQ0KKyFNRVNTQUdFICJsaWJjdXJsIC0gV2luMzIgTElCIERlYnVnIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIFN0YXRpYyBMaWJyYXJ5IikNCishTUVTU0FHRSAibGliY3VybCAtIFdpbjMyIExJQiBSZWxlYXNlIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIFN0YXRpYyBMaWJyYXJ5IikNCishTUVTU0FHRSANCisNCisjIEJlZ2luIFByb2plY3QNCisjIFBST1AgQWxsb3dQZXJDb25maWdEZXBlbmRlbmNpZXMgMA0KKyMgUFJPUCBTY2NfUHJvak5hbWUgIiINCisjIFBST1AgU2NjX0xvY2FsUGF0aCAiIg0KKw0KKyFJRiAgIiQoQ0ZHKSIgPT0gImxpYmN1cmwgLSBXaW4zMiBETEwgRGVidWciDQorDQorIyBQUk9QIEJBU0UgVXNlX01GQyAwDQorIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAxDQorIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiRExMLURlYnVnIg0KKyMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIkRMTC1EZWJ1ZyINCisjIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiDQorIyBQUk9QIFVzZV9NRkMgMA0KKyMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDENCisjIFBST1AgT3V0cHV0X0RpciAiRExMLURlYnVnIg0KKyMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJETEwtRGVidWciDQorIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDANCisjIFBST1AgVGFyZ2V0X0RpciAiIg0KK0NQUD1jbC5leGUNCisjIEFERCBCQVNFIENQUCAvbm9sb2dvIC9NRGQgL1czIC9HbSAvR1ggL1pJIC9PZCAvSSAiLiIgL0kgIi4uXGluY2x1ZGUiIC9EICJXSU4zMiIgL0QgIl9ERUJVRyIgL0QgIl9NQkNTIiAvRCAiQlVJTERJTkdfTElCQ1VSTCIgL0ZEIC9HWiAvYw0KKyMgQUREIENQUCAvbm9sb2dvIC9NRGQgL1czIC9HbSAvR1ggL1ppIC9PZCAvSSAiLiIgL0kgIi4uXGluY2x1ZGUiIC9EICJXSU4zMiIgL0QgIl9ERUJVRyIgL0QgIl9NQkNTIiAvRCAiQlVJTERJTkdfTElCQ1VSTCIgL0ZEIC9HWiAvYw0KK01UTD1taWRsLmV4ZQ0KKyMgQUREIEJBU0UgTVRMIC9ub2xvZ28gL0QgIl9ERUJVRyIgL21rdHlwbGliMjAzIC93aW4zMg0KKyMgQUREIE1UTCAvbm9sb2dvIC9EICJfREVCVUciIC9ta3R5cGxpYjIwMyAvd2luMzINCitSU0M9cmMuZXhlDQorIyBBREQgQkFTRSBSU0MgL2wgMHg0MDkgL2QgIl9ERUJVRyINCisjIEFERCBSU0MgL2wgMHg0MDkgL2QgIl9ERUJVRyINCitCU0MzMj1ic2NtYWtlLmV4ZQ0KKyMgQUREIEJBU0UgQlNDMzIgL25vbG9nbw0KKyMgQUREIEJTQzMyIC9ub2xvZ28NCitMSU5LMzI9bGluay5leGUNCisjIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgd3MyXzMyLmxpYiB3bGRhcDMyLmxpYiAvbm9sb2dvIC9kbGwgL2luY3JlbWVudGFsOm5vIC9tYXAgL2RlYnVnIC9tYWNoaW5lOkkzODYgL291dDoiRExMLURlYnVnL2xpYmN1cmxkLmRsbCIgL2ltcGxpYjoiRExMLURlYnVnL2xpYmN1cmxkX2ltcC5saWIiIC9wZGJ0eXBlOnNlcHQNCisjIEFERCBMSU5LMzIga2VybmVsMzIubGliIHdzMl8zMi5saWIgd2xkYXAzMi5saWIgL25vbG9nbyAvZGxsIC9pbmNyZW1lbnRhbDpubyAvbWFwIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9vdXQ6IkRMTC1EZWJ1Zy9saWJjdXJsZC5kbGwiIC9pbXBsaWI6IkRMTC1EZWJ1Zy9saWJjdXJsZF9pbXAubGliIiAvcGRidHlwZTpzZXB0DQorDQorIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gImxpYmN1cmwgLSBXaW4zMiBETEwgUmVsZWFzZSINCisNCisjIFBST1AgQkFTRSBVc2VfTUZDIDANCisjIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDANCisjIFBST1AgQkFTRSBPdXRwdXRfRGlyICJETEwtUmVsZWFzZSINCisjIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJETEwtUmVsZWFzZSINCisjIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiDQorIyBQUk9QIFVzZV9NRkMgMA0KKyMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDANCisjIFBST1AgT3V0cHV0X0RpciAiRExMLVJlbGVhc2UiDQorIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIkRMTC1SZWxlYXNlIg0KKyMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwDQorIyBQUk9QIFRhcmdldF9EaXIgIiINCitDUFA9Y2wuZXhlDQorIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvTUQgL1czIC9HWCAvTzIgL0kgIi4iIC9JICIuLlxpbmNsdWRlIiAvRCAiV0lOMzIiIC9EICJOREVCVUciIC9EICJfTUJDUyIgL0QgIkJVSUxESU5HX0xJQkNVUkwiIC9GRCAvYw0KKyMgQUREIENQUCAvbm9sb2dvIC9NRCAvVzMgL0dYIC9PMiAvSSAiLiIgL0kgIi4uXGluY2x1ZGUiIC9EICJXSU4zMiIgL0QgIk5ERUJVRyIgL0QgIl9NQkNTIiAvRCAiQlVJTERJTkdfTElCQ1VSTCIgL0ZEIC9jDQorTVRMPW1pZGwuZXhlDQorIyBBREQgQkFTRSBNVEwgL25vbG9nbyAvRCAiTkRFQlVHIiAvbWt0eXBsaWIyMDMgL3dpbjMyDQorIyBBREQgTVRMIC9ub2xvZ28gL0QgIk5ERUJVRyIgL21rdHlwbGliMjAzIC93aW4zMg0KK1JTQz1yYy5leGUNCisjIEFERCBCQVNFIFJTQyAvbCAweDQwOSAvZCAiTkRFQlVHIg0KKyMgQUREIFJTQyAvbCAweDQwOSAvZCAiTkRFQlVHIg0KK0JTQzMyPWJzY21ha2UuZXhlDQorIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvDQorIyBBREQgQlNDMzIgL25vbG9nbw0KK0xJTkszMj1saW5rLmV4ZQ0KKyMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB3czJfMzIubGliIHdsZGFwMzIubGliIC9ub2xvZ28gL2RsbCAvcGRiOm5vbmUgL21hY2hpbmU6STM4NiAvb3V0OiJETEwtUmVsZWFzZS9saWJjdXJsLmRsbCIgL2ltcGxpYjoiRExMLVJlbGVhc2UvbGliY3VybF9pbXAubGliIg0KKyMgQUREIExJTkszMiBrZXJuZWwzMi5saWIgd3MyXzMyLmxpYiB3bGRhcDMyLmxpYiAvbm9sb2dvIC9kbGwgL3BkYjpub25lIC9tYWNoaW5lOkkzODYgL291dDoiRExMLVJlbGVhc2UvbGliY3VybC5kbGwiIC9pbXBsaWI6IkRMTC1SZWxlYXNlL2xpYmN1cmxfaW1wLmxpYiINCisNCishRUxTRUlGICAiJChDRkcpIiA9PSAibGliY3VybCAtIFdpbjMyIExJQiBEZWJ1ZyINCisNCisjIFBST1AgQkFTRSBVc2VfTUZDIDANCisjIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDENCisjIFBST1AgQkFTRSBPdXRwdXRfRGlyICJMSUItRGVidWciDQorIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiTElCLURlYnVnIg0KKyMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiINCisjIFBST1AgVXNlX01GQyAwDQorIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQ0KKyMgUFJPUCBPdXRwdXRfRGlyICJMSUItRGVidWciDQorIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIkxJQi1EZWJ1ZyINCisjIFBST1AgVGFyZ2V0X0RpciAiIg0KK0NQUD1jbC5leGUNCisjIEFERCBCQVNFIENQUCAvbm9sb2dvIC9NRGQgL1czIC9HbSAvR1ggL1pJIC9PZCAvSSAiLiIgL0kgIi4uXGluY2x1ZGUiIC9EICJXSU4zMiIgL0QgIl9ERUJVRyIgL0QgIl9NQkNTIiAvRCAiQlVJTERJTkdfTElCQ1VSTCIgL0QgIkNVUkxfU1RBVElDTElCIiAvRkQgL0daIC9jDQorIyBBREQgQ1BQIC9ub2xvZ28gL01EZCAvVzMgL0dtIC9HWCAvWmkgL09kIC9JICIuIiAvSSAiLi5caW5jbHVkZSIgL0QgIldJTjMyIiAvRCAiX0RFQlVHIiAvRCAiX01CQ1MiIC9EICJCVUlMRElOR19MSUJDVVJMIiAvRCAiQ1VSTF9TVEFUSUNMSUIiIC9GRCAvR1ogL2MNCitSU0M9cmMuZXhlDQorIyBBREQgQkFTRSBSU0MgL2wgMHg0MDkgL2QgIl9ERUJVRyINCisjIEFERCBSU0MgL2wgMHg0MDkgL2QgIl9ERUJVRyINCitCU0MzMj1ic2NtYWtlLmV4ZQ0KKyMgQUREIEJBU0UgQlNDMzIgL25vbG9nbw0KKyMgQUREIEJTQzMyIC9ub2xvZ28NCitMSUIzMj1saW5rLmV4ZSAtbGliDQorIyBBREQgQkFTRSBMSUIzMiAvbm9sb2dvIC9vdXQ6IkxJQi1EZWJ1Zy9saWJjdXJsZC5saWIiIC9tYWNoaW5lOkkzODYNCisjIEFERCBMSUIzMiAvbm9sb2dvIC9vdXQ6IkxJQi1EZWJ1Zy9saWJjdXJsZC5saWIiIC9tYWNoaW5lOkkzODYNCisNCishRUxTRUlGICAiJChDRkcpIiA9PSAibGliY3VybCAtIFdpbjMyIExJQiBSZWxlYXNlIg0KKw0KKyMgUFJPUCBCQVNFIFVzZV9NRkMgMA0KKyMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMA0KKyMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIkxJQi1SZWxlYXNlIg0KKyMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIkxJQi1SZWxlYXNlIg0KKyMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiINCisjIFBST1AgVXNlX01GQyAwDQorIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMA0KKyMgUFJPUCBPdXRwdXRfRGlyICJMSUItUmVsZWFzZSINCisjIFBST1AgSW50ZXJtZWRpYXRlX0RpciAiTElCLVJlbGVhc2UiDQorIyBQUk9QIFRhcmdldF9EaXIgIiINCitDUFA9Y2wuZXhlDQorIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvTUQgL1czIC9HWCAvTzIgL0kgIi4iIC9JICIuLlxpbmNsdWRlIiAvRCAiV0lOMzIiIC9EICJOREVCVUciIC9EICJfTUJDUyIgL0QgIkJVSUxESU5HX0xJQkNVUkwiIC9EICJDVVJMX1NUQVRJQ0xJQiIgL0ZEIC9jDQorIyBBREQgQ1BQIC9ub2xvZ28gL01EIC9XMyAvR1ggL08yIC9JICIuIiAvSSAiLi5caW5jbHVkZSIgL0QgIldJTjMyIiAvRCAiTkRFQlVHIiAvRCAiX01CQ1MiIC9EICJCVUlMRElOR19MSUJDVVJMIiAvRCAiQ1VSTF9TVEFUSUNMSUIiIC9GRCAvYw0KK1JTQz1yYy5leGUNCisjIEFERCBCQVNFIFJTQyAvbCAweDQwOSAvZCAiTkRFQlVHIg0KKyMgQUREIFJTQyAvbCAweDQwOSAvZCAiTkRFQlVHIg0KK0JTQzMyPWJzY21ha2UuZXhlDQorIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvDQorIyBBREQgQlNDMzIgL25vbG9nbw0KK0xJQjMyPWxpbmsuZXhlIC1saWINCisjIEFERCBCQVNFIExJQjMyIC9ub2xvZ28gL291dDoiTElCLVJlbGVhc2UvbGliY3VybC5saWIiIC9tYWNoaW5lOkkzODYNCisjIEFERCBMSUIzMiAvbm9sb2dvIC9vdXQ6IkxJQi1SZWxlYXNlL2xpYmN1cmwubGliIiAvbWFjaGluZTpJMzg2DQorDQorIUVORElGIA0KKw0KKyMgQmVnaW4gVGFyZ2V0DQorDQorIyBOYW1lICJsaWJjdXJsIC0gV2luMzIgRExMIERlYnVnIg0KKyMgTmFtZSAibGliY3VybCAtIFdpbjMyIERMTCBSZWxlYXNlIg0KKyMgTmFtZSAibGliY3VybCAtIFdpbjMyIExJQiBEZWJ1ZyINCisjIE5hbWUgImxpYmN1cmwgLSBXaW4zMiBMSUIgUmVsZWFzZSINCisjIEJlZ2luIEdyb3VwICJTb3VyY2UgRmlsZXMiDQorDQorIyBQUk9QIERlZmF1bHRfRmlsdGVyICIiDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uXGJhc2U2NC5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS5cY29ubmVjdC5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS5cY29udGVudF9lbmNvZGluZy5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS5cY29va2llLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9LlxjdXJsX2FkZHJpbmZvLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9LlxjdXJsX2ZubWF0Y2guYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uXGN1cmxfZ2V0aG9zdG5hbWUuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uXGN1cmxfbWVtcmNoci5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS5cY3VybF9yYW5kLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9LlxjdXJsX3J0bXAuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uXGN1cmxfc3NwaS5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS5cY3VybF90aHJlYWRzLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9LlxkaWN0LmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9LlxlYXN5LmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Llxlc2NhcGUuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uXGZpbGUuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uXGZpbGVpbmZvLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Llxmb3JtZGF0YS5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS5cZnRwLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9LlxmdHBsaXN0cGFyc2VyLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9LlxnZXRlbnYuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uXGdldGluZm8uYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uXGdvcGhlci5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS5cZ3Rscy5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS5caGFzaC5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS5caG1hYy5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS5caG9zdGFyZXMuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uXGhvc3Rhc3luLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Llxob3N0aXA0LmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Llxob3N0aXA2LmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Llxob3N0aXAuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uXGhvc3RzeW4uYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uXGhvc3R0aHJlLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9LlxodHRwLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9LlxodHRwX2NodW5rcy5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS5caHR0cF9kaWdlc3QuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uXGh0dHBfbmVnb3RpYXRlLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9LlxodHRwX250bG0uYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uXGlmMmlwLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9LlxpbWFwLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9LlxpbmV0X250b3AuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uXGluZXRfcHRvbi5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS5ca3JiNC5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS5ca3JiNS5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS5cbGRhcC5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS5cbGxpc3QuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uXG1kNC5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS5cbWQ1LmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9LlxtZW1kZWJ1Zy5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS5cbXByaW50Zi5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS5cbXVsdGkuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uXG5ldHJjLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Llxub25ibG9jay5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS5cbnNzLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9LlxvcGVubGRhcC5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS5ccGFyc2VkYXRlLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9LlxwaW5ncG9uZy5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS5ccG9sYXJzc2wuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uXHBvcDMuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uXHByb2dyZXNzLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Llxxc3NsLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9LlxyYXdzdHIuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uXHJ0c3AuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uXHNlY3VyaXR5LmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9LlxzZWxlY3QuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uXHNlbmRmLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9LlxzaGFyZS5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS5cc2xpc3QuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uXHNtdHAuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uXHNvY2tzLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Llxzb2Nrc19nc3NhcGkuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uXHNvY2tzX3NzcGkuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uXHNwZWVkY2hlY2suYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uXHNwbGF5LmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Llxzc2guYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uXHNzbGdlbi5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS5cc3NsdXNlLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9LlxzdHJkdXAuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uXHN0cmVxdWFsLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9LlxzdHJlcnJvci5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS5cc3RydG9rLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9LlxzdHJ0b29mZnQuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uXHRlbG5ldC5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS5cdGZ0cC5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS5cdGltZXZhbC5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS5cdHJhbnNmZXIuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uXHVybC5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS5cdmVyc2lvbi5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS5cd2Fybmxlc3MuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uXHdpbGRjYXJkLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgRW5kIEdyb3VwDQorIyBCZWdpbiBHcm91cCAiSGVhZGVyIEZpbGVzIg0KKw0KKyMgUFJPUCBEZWZhdWx0X0ZpbHRlciAiIg0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9LlxhcnBhX3RlbG5ldC5oDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS5cY29uZmlnLXdpbjMyLmgNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Llxjb25uZWN0LmgNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Llxjb250ZW50X2VuY29kaW5nLmgNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Llxjb29raWUuaA0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uXGN1cmxfYWRkcmluZm8uaA0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uXGN1cmxfYmFzZTY0LmgNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9LlxjdXJsX2ZubWF0Y2guaA0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uXGN1cmxfZ2V0aG9zdG5hbWUuaA0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uXGN1cmxfaG1hYy5oDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS5cY3VybF9sZGFwLmgNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9LlxjdXJsX21kNC5oDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS5cY3VybF9tZDUuaA0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uXGN1cmxfbWVtb3J5LmgNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9LlxjdXJsX21lbXJjaHIuaA0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uXGN1cmxfcmFuZC5oDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS5cY3VybF9ydG1wLmgNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9LlxjdXJsX3NzcGkuaA0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uXGN1cmxfdGhyZWFkcy5oDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS5cY3VybHguaA0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uXGRpY3QuaA0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uXGVhc3lpZi5oDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS5cZXNjYXBlLmgNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9LlxmaWxlLmgNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9LlxmaWxlaW5mby5oDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS5cZm9ybWRhdGEuaA0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uXGZ0cC5oDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS5cZnRwbGlzdHBhcnNlci5oDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS5cZ2V0aW5mby5oDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS5cZ29waGVyLmgNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9LlxndGxzLmgNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9LlxoYXNoLmgNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Llxob3N0aXAuaA0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uXGh0dHBfY2h1bmtzLmgNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9LlxodHRwX2RpZ2VzdC5oDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS5caHR0cC5oDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS5caHR0cF9uZWdvdGlhdGUuaA0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uXGh0dHBfbnRsbS5oDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS5caWYyaXAuaA0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uXGltYXAuaA0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uXGluZXRfbnRvcC5oDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS5caW5ldF9wdG9uLmgNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9LlxrcmI0LmgNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9LlxsbGlzdC5oDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS5cbWVtZGVidWcuaA0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uXG11bHRpaWYuaA0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uXG5ldHJjLmgNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Llxub25ibG9jay5oDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS5cbnNzZy5oDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS5ccGFyc2VkYXRlLmgNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9LlxwaW5ncG9uZy5oDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS5ccG9sYXJzc2wuaA0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uXHBvcDMuaA0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uXHByb2dyZXNzLmgNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Llxxc3NsLmgNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9LlxyYXdzdHIuaA0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uXHJ0c3AuaA0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uXHNlbGVjdC5oDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS5cc2VuZGYuaA0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uXHNldHVwLmgNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9LlxzZXR1cF9vbmNlLmgNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9LlxzaGFyZS5oDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS5cc2xpc3QuaA0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uXHNtdHAuaA0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uXHNvY2thZGRyLmgNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Llxzb2Nrcy5oDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS5cc3BlZWRjaGVjay5oDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS5cc3BsYXkuaA0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uXHNzaC5oDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS5cc3NsZ2VuLmgNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Llxzc2x1c2UuaA0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uXHN0cmR1cC5oDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS5cc3RyZXF1YWwuaA0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uXHN0cmVycm9yLmgNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9LlxzdHJ0b2suaA0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uXHN0cnRvb2ZmdC5oDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS5cdGVsbmV0LmgNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Llx0ZnRwLmgNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Llx0aW1ldmFsLmgNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Llx0cmFuc2Zlci5oDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS5cdXJsZGF0YS5oDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS5cdXJsLmgNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Llx3YXJubGVzcy5oDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS5cd2lsZGNhcmQuaA0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBFbmQgR3JvdXANCisNCisjIEJlZ2luIEdyb3VwICJSZXNvdXJjZSBGaWxlcyINCisNCisjIFBST1AgRGVmYXVsdF9GaWx0ZXIgIiINCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS5cbGliY3VybC5yYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBFbmQgR3JvdXANCisjIEVuZCBUYXJnZXQNCisjIEVuZCBQcm9qZWN0DQpkaWZmIC0tZ2l0IGEvbGliL3ZjNmxpYmN1cmwuZHN3IGIvbGliL3ZjNmxpYmN1cmwuZHN3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmYTg4MTQKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvdmM2bGliY3VybC5kc3cKQEAgLTAsMCArMSwyOSBAQAorTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gV29ya3NwYWNlIEZpbGUsIEZvcm1hdCBWZXJzaW9uIDYuMDANCisjIFdBUk5JTkc6IERPIE5PVCBFRElUIE9SIERFTEVURSBUSElTIFdPUktTUEFDRSBGSUxFIQ0KKw0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCisNCitQcm9qZWN0OiAibGliY3VybCI9Ii5cdmM2bGliY3VybC5kc3AiIC0gUGFja2FnZSBPd25lcj08ND4NCisNCitQYWNrYWdlPTw1Pg0KK3t7ew0KK319fQ0KKw0KK1BhY2thZ2U9PDQ+DQore3t7DQorfX19DQorDQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KKw0KK0dsb2JhbDoNCisNCitQYWNrYWdlPTw1Pg0KK3t7ew0KK319fQ0KKw0KK1BhY2thZ2U9PDM+DQore3t7DQorfX19DQorDQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KKw0KZGlmZiAtLWdpdCBhL2xpYi92ZXJzaW9uLmMgYi9saWIvdmVyc2lvbi5jCmluZGV4IGFhODZlMzkuLjliYTJlMzMgMTAwNjQ0Ci0tLSBhL2xpYi92ZXJzaW9uLmMKKysrIGIvbGliL3ZlcnNpb24uYwpAQCAtNDQsNiArNDQsMTAgQEAKICNpbmNsdWRlIDxpY29udi5oPgogI2VuZGlmCiAKKyNpZmRlZiBVU0VfTElCUlRNUAorI2luY2x1ZGUgPGxpYnJ0bXAvcnRtcC5oPgorI2VuZGlmCisKICNpZmRlZiBVU0VfTElCU1NIMgogI2luY2x1ZGUgPGxpYnNzaDIuaD4KICNlbmRpZgpAQCAtMTExLDYgKzExNSwyNiBAQAogICBsZWZ0IC09IGxlbjsKICAgcHRyICs9IGxlbjsKICNlbmRpZgorI2lmZGVmIFVTRV9MSUJSVE1QCisgIHsKKyAgICBjaGFyIHN1ZmZbMl07CisgICAgaWYgKFJUTVBfTElCX1ZFUlNJT04gJiAweGZmKSB7CisgICAgICBzdWZmWzBdID0gKFJUTVBfTElCX1ZFUlNJT04gJiAweGZmKSArICdhJyAtIDE7CisgICAgICBzdWZmWzFdID0gJ1wwJzsKKyAgICB9IGVsc2UgeworICAgICAgc3VmZlswXSA9ICdcMCc7CisgICAgfQorICAgIGxlbiA9IHNucHJpbnRmKHB0ciwgbGVmdCwgIiBsaWJydG1wLyVkLiVkJXMiLAorICAgICAgUlRNUF9MSUJfVkVSU0lPTiA+PiAxNiwgKFJUTVBfTElCX1ZFUlNJT04gPj4gOCkgJiAweGZmLCBzdWZmKTsKKy8qCisgIElmIGFub3RoZXIgbGliIHZlcnNpb24gaXMgYWRkZWQgYmVsb3cgdGhpcyBvbmUsIHRoaXMgY29kZSB3b3VsZAorICBhbHNvIGhhdmUgdG8gZG86CisKKyAgICBsZWZ0IC09IGxlbjsKKyAgICBwdHIgKz0gbGVuOworKi8KKyAgfQorI2VuZGlmCiAKICAgcmV0dXJuIHZlcnNpb247CiB9CkBAIC0xMzQsNiArMTU4LDkgQEAKICNpZiBkZWZpbmVkKFVTRV9TU0wpICYmICFkZWZpbmVkKENVUkxfRElTQUJMRV9GVFApCiAgICJmdHBzIiwKICNlbmRpZgorI2lmbmRlZiBDVVJMX0RJU0FCTEVfR09QSEVSCisgICJnb3BoZXIiLAorI2VuZGlmCiAjaWZuZGVmIENVUkxfRElTQUJMRV9IVFRQCiAgICJodHRwIiwKICNlbmRpZgpAQCAtMTQ4LDE2ICsxNzUsMjAgQEAKICNlbmRpZgogI2lmbmRlZiBDVVJMX0RJU0FCTEVfTERBUAogICAibGRhcCIsCi0jZW5kaWYKLSNpZiBkZWZpbmVkKEhBVkVfTERBUF9TU0wpICYmICFkZWZpbmVkKENVUkxfRElTQUJMRV9MREFQKQorI2lmIChkZWZpbmVkKFVTRV9PUEVOTERBUCkgJiYgZGVmaW5lZChVU0VfU1NMKSkgfHwgXAorICAgKCFkZWZpbmVkKFVTRV9PUEVOTERBUCkgJiYgZGVmaW5lZChIQVZFX0xEQVBfU1NMKSkKICAgImxkYXBzIiwKICNlbmRpZgorI2VuZGlmCiAjaWZuZGVmIENVUkxfRElTQUJMRV9QT1AzCiAgICJwb3AzIiwKICNlbmRpZgogI2lmIGRlZmluZWQoVVNFX1NTTCkgJiYgIWRlZmluZWQoQ1VSTF9ESVNBQkxFX1BPUDMpCiAgICJwb3AzcyIsCiAjZW5kaWYKKyNpZmRlZiBVU0VfTElCUlRNUAorICAicnRtcCIsCisjZW5kaWYKICNpZm5kZWYgQ1VSTF9ESVNBQkxFX1JUU1AKICAgInJ0c3AiLAogI2VuZGlmCmRpZmYgLS1naXQgYS9saWIvd2lsZGNhcmQuYyBiL2xpYi93aWxkY2FyZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmZTVkNTEKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvd2lsZGNhcmQuYwpAQCAtMCwwICsxLDc2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDEwLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgInNldHVwLmgiCisjaW5jbHVkZSAid2lsZGNhcmQuaCIKKyNpbmNsdWRlICJsbGlzdC5oIgorI2luY2x1ZGUgImZpbGVpbmZvLmgiCisKKyNkZWZpbmUgX01QUklOVEZfUkVQTEFDRSAvKiB1c2Ugb3VyIGZ1bmN0aW9ucyBvbmx5ICovCisjaW5jbHVkZSA8Y3VybC9tcHJpbnRmLmg+CisKKyNpbmNsdWRlICJjdXJsX21lbW9yeS5oIgorLyogVGhlIGxhc3QgI2luY2x1ZGUgZmlsZSBzaG91bGQgYmU6ICovCisjaW5jbHVkZSAibWVtZGVidWcuaCIKKworQ1VSTGNvZGUgQ3VybF93aWxkY2FyZF9pbml0KHN0cnVjdCBXaWxkY2FyZERhdGEgKndjKQoreworICBERUJVR0FTU0VSVCh3Yy0+ZmlsZWxpc3QgPT0gTlVMTCk7CisgIC8qIG5vdyBhbGxvY2F0ZSBvbmx5IHdjLT5maWxlbGlzdCwgZXZlcnl0aGluZyBlbHNlCisgICAgIHdpbGwgYmUgYWxsb2NhdGVkIGlmIGl0IGlzIG5lZWRlZC4gKi8KKyAgd2MtPmZpbGVsaXN0ID0gQ3VybF9sbGlzdF9hbGxvYyhDdXJsX2ZpbGVpbmZvX2R0b3IpOworICBpZighd2MtPmZpbGVsaXN0KSB7OworICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOworICB9CisgIHJldHVybiBDVVJMRV9PSzsKK30KKwordm9pZCBDdXJsX3dpbGRjYXJkX2R0b3Ioc3RydWN0IFdpbGRjYXJkRGF0YSAqd2MpCit7CisgIGlmKCF3YykKKyAgICByZXR1cm47CisKKyAgaWYod2MtPnRtcF9kdG9yKSB7CisgICAgd2MtPnRtcF9kdG9yKHdjLT50bXApOworICAgIHdjLT50bXBfZHRvciA9IFpFUk9fTlVMTDsKKyAgICB3Yy0+dG1wID0gTlVMTDsKKyAgfQorICBERUJVR0FTU0VSVCh3Yy0+dG1wID09IE5VTEwpOworCisgIGlmKHdjLT5maWxlbGlzdCkgeworICAgIEN1cmxfbGxpc3RfZGVzdHJveSh3Yy0+ZmlsZWxpc3QsIE5VTEwpOworICAgIHdjLT5maWxlbGlzdCA9IE5VTEw7CisgIH0KKworICBpZih3Yy0+cGF0aCkgeworICAgIGZyZWUod2MtPnBhdGgpOworICAgIHdjLT5wYXRoID0gTlVMTDsKKyAgfQorCisgIGlmKHdjLT5wYXR0ZXJuKSB7CisgICAgZnJlZSh3Yy0+cGF0dGVybik7CisgICAgd2MtPnBhdHRlcm4gPSBOVUxMOworICB9CisKKyAgd2MtPmN1c3RvbXB0ciA9IE5VTEw7CisgIHdjLT5zdGF0ZSA9IENVUkxXQ19JTklUOworfQpkaWZmIC0tZ2l0IGEvbGliL3dpbGRjYXJkLmggYi9saWIvd2lsZGNhcmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZjczMmQxCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3dpbGRjYXJkLmgKQEAgLTAsMCArMSw1OCBAQAorI2lmbmRlZiBIRUFERVJfQ1VSTF9XSUxEQ0FSRF9ICisjZGVmaW5lIEhFQURFUl9DVVJMX1dJTERDQVJEX0gKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyAqCisgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlIDxjdXJsL2N1cmwuaD4KKworLyogbGlzdCBvZiB3aWxkY2FyZCBwcm9jZXNzIHN0YXRlcyAqLwordHlwZWRlZiBlbnVtIHsKKyAgQ1VSTFdDX0lOSVQgPSAwLAorICBDVVJMV0NfTUFUQ0hJTkcsIC8qIGxpYnJhcnkgaXMgdHJ5aW5nIHRvIGdldCBsaXN0IG9mIGFkZHJlc3NlcyBmb3IKKyAgICAgICAgICAgICAgICAgICAgICBkb3dubG9hZGluZyAqLworICBDVVJMV0NfRE9XTkxPQURJTkcsCisgIENVUkxXQ19DTEVBTiwgLyogZGVhbGxvY2F0ZSByZXNvdXJjZXMgYW5kIHJlc2V0IHNldHRpbmdzICovCisgIENVUkxXQ19TS0lQLCAgLyogc2tpcCBvdmVyIGNvbmNyZXRlIGZpbGUgKi8KKyAgQ1VSTFdDX0VSUk9SLCAvKiBlcnJvciBjYXNlcyAqLworICBDVVJMV0NfRE9ORSAgIC8qIGlmIGlzIHdpbGRjYXJkLT5zdGF0ZSA9PSBDVVJMV0NfRE9ORSB3aWxkY2FyZCBsb29wIGluCisgICAgICAgICAgICAgICAgICAgQ3VybF9wZXJmb3JtKCkgd2lsbCBlbmQgKi8KK30gY3VybF93aWxkY2FyZF9zdGF0ZXM7CisKK3R5cGVkZWYgdm9pZCAoKmN1cmxfd2lsZGNhcmRfdG1wX2R0b3IpKHZvaWQgKnB0cik7CisKKy8qIHN0cnVjdCBrZWVwaW5nIGluZm9ybWF0aW9uIGFib3V0IHdpbGRjYXJkIGRvd25sb2FkIHByb2Nlc3MgKi8KK3N0cnVjdCBXaWxkY2FyZERhdGEgeworICBjdXJsX3dpbGRjYXJkX3N0YXRlcyBzdGF0ZTsKKyAgY2hhciAqcGF0aDsgLyogcGF0aCB0byB0aGUgZGlyZWN0b3J5LCB3aGVyZSB3ZSB0cnlpbmcgd2lsZGNhcmQtbWF0Y2ggKi8KKyAgY2hhciAqcGF0dGVybjsgLyogd2lsZGNhcmQgcGF0dGVybiAqLworICBzdHJ1Y3QgY3VybF9sbGlzdCAqZmlsZWxpc3Q7IC8qIGxsaXN0IHdpdGggc3RydWN0IEN1cmxfZmlsZWluZm8gKi8KKyAgdm9pZCAqdG1wOyAvKiBwb2ludGVyIHRvIHByb3RvY29sIHNwZWNpZmljIHRlbXBvcmFyeSBkYXRhICovCisgIGN1cmxfd2lsZGNhcmRfdG1wX2R0b3IgdG1wX2R0b3I7CisgIHZvaWQgKmN1c3RvbXB0cjsgIC8qIGZvciBDVVJMT1BUX0NIVU5LX0RBVEEgcG9pbnRlciAqLworfTsKKworQ1VSTGNvZGUgQ3VybF93aWxkY2FyZF9pbml0KHN0cnVjdCBXaWxkY2FyZERhdGEgKndjKTsKK3ZvaWQgQ3VybF93aWxkY2FyZF9kdG9yKHN0cnVjdCBXaWxkY2FyZERhdGEgKndjKTsKKworc3RydWN0IFNlc3Npb25IYW5kbGU7CisKKyNlbmRpZiAvKiBIRUFERVJfQ1VSTF9XSUxEQ0FSRF9IICovCg==