ZGlmZiAtLWdpdCBhL2FwL2hvc3RhcHAvemR1bXBfcmVmL3VzYl9kZXYuYyBiL2FwL2hvc3RhcHAvemR1bXBfcmVmL3VzYl9kZXYuYwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lNjRiMjBlCi0tLSAvZGV2L251bGwKKysrIGIvYXAvaG9zdGFwcC96ZHVtcF9yZWYvdXNiX2Rldi5jCkBAIC0wLDAgKzEsMTcwIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiCw5sioy/nT0CAoQykyMDE2LCDW0NDLzajRtrnJt93T0M/euavLvqGjCisqIAorKiDOxLz+w/uzxjogICAgIHVzYl9kZXYuYworKiDOxLz+serKtjogICAgIHVzYl9kZXYuYworKiDE2sjd1arSqjogICAgIHVzYsnosbi3w87KuaS+3worKiAKKyog0N64xMjVxtogICAgICAgILDmsb66xSAgICAgINDeuMSx6rzHICAgICAgICDQ3rjEyMsgICAgICAgICAg0N64xMTayN0KKyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIDIwMTYvMy8xMCAgICAgIFYxLjAgICAgICAgIENyZWF0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgtLS9qAorKiAKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICDNt87EvP4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpbmNsdWRlPHN0ZGxpYi5oPgorI2luY2x1ZGU8c3RkaW8uaD4KKyNpbmNsdWRlPHN0cmluZy5oPgorI2luY2x1ZGU8c3lzL3R5cGVzLmg+CisjaW5jbHVkZTxzeXMvc3RhdC5oPgorI2luY2x1ZGU8ZmNudGwuaD4KKyNpbmNsdWRlPGVycm5vLmg+CisjaW5jbHVkZTxnZXRvcHQuaD4KKyNpbmNsdWRlPHN0ZGFyZy5oPgorI2luY2x1ZGU8dGVybWlvcy5oPgorI2luY2x1ZGU8c3RkZGVmLmg+CisjaW5jbHVkZTxkaXJlbnQuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgILrqtqjS5SAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBVU0JfRElSX0ZJTEVfTkFNRV9TSVpFIDEwMjQKKyNkZWZpbmUgVVNCX0RJUl9CQVNFICIvc3lzL2J1cy91c2IvZGV2aWNlcyIKKyNkZWZpbmUgVVNCX1BJRCAweDAxOTcKKyNkZWZpbmUgU1VDQ0VTUyAwCisjZGVmaW5lIEZBSUwgICAgLTEKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgs6PBv7ao0uUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworY2hhciBzeXNfZmlsZW5hbWVbVVNCX0RJUl9GSUxFX05BTUVfU0laRV0gPSB7MH07CitpbnQgZ191c2JfZGV2ID0gLTE7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICDK/b7dwODQzbao0uUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgILqvyv3J+cP3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgvtayv76yzKyx5MG/tqjS5SAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIMirvtax5MG/tqjS5SAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgvtayv7qvyv3Ktc/WICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitpbnQgZGV2X2dldF91c2JzeXNfdmFsKGNvbnN0IGNoYXIgKnN5c19maWxlbmFtZSwgaW50IGJhc2UpCit7CisJY2hhciBidWZmWzY0XSA9IHswfTsKKwlpbnQgcmV0X3ZhbCA9IC0xOworCWludCBmZCA9IC0xOworCisJZmQgPSBvcGVuKHN5c19maWxlbmFtZSwgT19SRE9OTFkpOworCWlmIChmZCA8IDApIHsKKwkJcHJpbnRmKCJmYWlsZWQgdG8gb3BlbiB1c2JzeXMsIGVycm9yIGlzICVzXG4iLCBzdHJlcnJvcihlcnJubykpOworCQlyZXR1cm4gRkFJTDsKKwl9CisKKwlpZiAocmVhZChmZCwgYnVmZiwgc2l6ZW9mKGJ1ZmYpKSA8PSAwKSB7CisJCXByaW50ZigiWyVzXSByZWFkOiVzIGZhaWxlZFxuIiwgX19mdW5jX18sIHN5c19maWxlbmFtZSk7CisJfQorCWVsc2UgeworCQlyZXRfdmFsID0gc3RydG91bChidWZmLCBOVUxMLCBiYXNlKTsKKwl9CisJY2xvc2UoZmQpOworCisJcmV0dXJuIHJldF92YWw7Cit9CisKK2ludCBkZXZfc3RyU3RhcnRzV2l0aChjb25zdCBjaGFyICpsaW5lLCBjb25zdCBjaGFyICpzcmMpCit7CisJaW50IHJldCA9IC0xOworCisJZm9yICggOyAqbGluZSAhPSAnXDAnICYmICpzcmMgIT0gJ1wwJzsgbGluZSsrLCBzcmMrKykgeworCQlpZiAoKmxpbmUgIT0gKnNyYykgeworCQkJcmV0dXJuIEZBSUw7CisJCX0KKwl9CisJcmV0ID0gYXRvaShsaW5lKTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgZGV2X2dldF90dHlwb3J0X2J5X3N5c3BhdGgoY2hhciAqc3lzcGF0aCkKK3sKKwlESVIgKnVzYmRpciA9IE5VTEw7CisJc3RydWN0IGRpcmVudCAqZGVudCA9IE5VTEw7CisJaW50IHVzYl9wb3J0ID0gLTE7CisKKwl1c2JkaXIgPSBvcGVuZGlyKHN5c3BhdGgpOworCWlmICh1c2JkaXIgPT0gTlVMTCkgeworCQlwcmludGYoIiVzOiBvcGVuIFslc10gYnVzZGlyIGZhaWxlZFxuIiwgX19mdW5jX18sIHN5c3BhdGgpOworCQlyZXR1cm4gLTE7CisJfQorCisJd2hpbGUgKChkZW50ID0gcmVhZGRpcih1c2JkaXIpKSAhPSBOVUxMKQorCXsKKwkJdXNiX3BvcnQgPSBkZXZfc3RyU3RhcnRzV2l0aChkZW50LT5kX25hbWUsICJ0dHlVU0IiKTsKKwkJaWYgKCB1c2JfcG9ydCA+PSAwKSB7CisJCQljbG9zZWRpcih1c2JkaXIpOworCQkJdXNiZGlyID0gTlVMTDsKKwkJCXJldHVybiB1c2JfcG9ydDsKKwkJfQorCX0KKworCWlmICh1c2JkaXIpIHsKKwkJY2xvc2VkaXIodXNiZGlyKTsKKwkJdXNiZGlyID0gTlVMTDsKKwl9CisJcmV0dXJuIEZBSUw7Cit9CisKK2ludCBkZXZfZ2V0X2RldmljZSh2b2lkKQoreworCURJUiAqdXNiZGlyID0gTlVMTDsKKwlzdHJ1Y3QgZGlyZW50ICpkZW50ID0gTlVMTDsKKwlpbnQgaWRQcm9kdWN0ID0gMDsKKwlpbnQgYkNvbmZpZ3VyYXRpb25WYWx1ZSA9IDA7CisJaW50IG51bSA9IDA7CisJdXNiZGlyID0gb3BlbmRpcihVU0JfRElSX0JBU0UpOworCWlmICh1c2JkaXIgPT0gTlVMTCkKKwkJcmV0dXJuIEZBSUw7CisKKwl3aGlsZSAoKGRlbnQgPSByZWFkZGlyKHVzYmRpcikpICE9IE5VTEwpeworCQlpZiAoc3RyY21wKGRlbnQtPmRfbmFtZSwgIi4iKSA9PSAwIHx8IHN0cmNtcChkZW50LT5kX25hbWUsICIuLiIpID09IDApIHsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJc25wcmludGYoc3lzX2ZpbGVuYW1lLCBzaXplb2Yoc3lzX2ZpbGVuYW1lKSwgIiVzLyVzL2lkUHJvZHVjdCIsIFVTQl9ESVJfQkFTRSwgZGVudC0+ZF9uYW1lKTsKKwkJaWYgKChpZFByb2R1Y3QgPSBkZXZfZ2V0X3VzYnN5c192YWwoc3lzX2ZpbGVuYW1lLCAxNikpIDw9IDApIHsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJc25wcmludGYoc3lzX2ZpbGVuYW1lLCBzaXplb2Yoc3lzX2ZpbGVuYW1lKSwgIiVzLyVzL2JDb25maWd1cmF0aW9uVmFsdWUiLCBVU0JfRElSX0JBU0UsIGRlbnQtPmRfbmFtZSk7CisJCWlmICgoYkNvbmZpZ3VyYXRpb25WYWx1ZSA9IGRldl9nZXRfdXNic3lzX3ZhbChzeXNfZmlsZW5hbWUsIDEwKSkgPD0gMCkgeworCQkJY29udGludWU7CisJCX0KKworCQlpZiAoaWRQcm9kdWN0ID09IFVTQl9QSUQpeworCQkJc25wcmludGYoc3lzX2ZpbGVuYW1lLCBzaXplb2Yoc3lzX2ZpbGVuYW1lKSwgIiVzLyVzLyVzOiVkLiVkIiwgVVNCX0RJUl9CQVNFLCBkZW50LT5kX25hbWUsIGRlbnQtPmRfbmFtZSwgYkNvbmZpZ3VyYXRpb25WYWx1ZSwgMCk7CisJCQlnX3VzYl9kZXYgPSBkZXZfZ2V0X3R0eXBvcnRfYnlfc3lzcGF0aChzeXNfZmlsZW5hbWUpOworCQkJY2xvc2VkaXIodXNiZGlyKTsKKwkJCXVzYmRpciA9IE5VTEw7CisJCQlyZXR1cm4gU1VDQ0VTUzsKKwkJfQorCX0KKwlpZiAodXNiZGlyKSB7CisJCWNsb3NlZGlyKHVzYmRpcik7CisJCXVzYmRpciA9IE5VTEw7CisJfQorCXJldHVybiBGQUlMOworfQorCg==