ZGlmZiAtLWdpdCBhL2xpYnVwZ3JhZGUvaG14X3VwZ3JhZGVfZmxhc2guYyBiL2xpYnVwZ3JhZGUvaG14X3VwZ3JhZGVfZmxhc2guYwppbmRleCAzMmRiNzkyLi42MTUzZDAxIDEwMDY0NAotLS0gYS9saWJ1cGdyYWRlL2hteF91cGdyYWRlX2ZsYXNoLmMKKysrIGIvbGlidXBncmFkZS9obXhfdXBncmFkZV9mbGFzaC5jCkBAIC04Miw4ICs4Miw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qIFN0YXJ0ICNkZWZpbmUgKi8KIC8qIHRoaXMgaXMgZm9yIHRlc3QgKi8KLSNkZWZpbmUgVEFSR0VUX05WUkFNX01URCAgICAgICAgIi9kZXYvbXRkYmxvY2sxIgotI2RlZmluZSBUQVJHRVRfTlZSQU1fTVREQyAgICAgICAiL2Rldi9tdGQxIgorI2RlZmluZSBUQVJHRVRfTlZSQU1fTVREICAgICAgICAiL2Rldi9tdGQvaG52cmFtIgogLyogRW5kICNkZWZpbmUgKi8KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC0xMDUsOCArMTA0LDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKiogc3RhdGljIHZhcmlhYmxlcyAqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKiBTdGFydCBzdGF0aWMgdmFyaWFibGUgKi8KLWludCBmZF9udnJhbSA9IDA7Ci1pbnQgZmRfbnZyYW1fYyA9IC0xOworaW50IGZkX252cmFtID0gLTE7CiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nICAgIHNfRmxhc2hUb3RhbFNpemU7CiBzdGF0aWMgdW5zaWduZWQgbG9uZyAgICBzX0ZsYXNoQmxvY2tTaXplOwpAQCAtMTIwLDY3ICsxMTgsMjggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgc2l6ZSApCiB7CiAgIGludCByZXQ7Ci0gIHN0cnVjdCBtdGRfaW5mb191c2VyIGluZm87Ci0gIHVuc2lnbmVkIGxvbmcgYmxvY2tfc2l6ZSwgd3JpdGVfc2l6ZTsKLSAgdW5zaWduZWQgbG9uZyBtb3Zfb2Zmc2V0LCByZW1haW5fc2l6ZTsKIAogICBpZiAobGlidXBncmFkZV92ZXJib3NlKSBwcmludGYoIlslc10gb2Zmc2V0ICUwOHgsIHNpemUgJWQsIGRhdGEgPSAlMDJ4XG4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19GVU5DVElPTl9fLCBvZmZzZXQsIHNpemUsIGRhdGFbMF0gKTsKIAotICAvKiAqLwotICBpZiAoIGZkX252cmFtID09IDAgKSB7CisgIGlmICggZmRfbnZyYW0gPCAwICkgewogICAgIGZkX252cmFtID0gb3BlbihUQVJHRVRfTlZSQU1fTVRELCAoT19SRFdSIHwgT19TWU5DKSApOwogICAgIGlmKCBmZF9udnJhbSA8IDAgKSB7Ci0gICAgICBwcmludGYoICJGYWlsZWQgdG8gb3BlbiFcbiIgKTsKKyAgICAgIHBlcnJvcihUQVJHRVRfTlZSQU1fTVREKTsKICAgICAgIHJldHVybiAtMTsKICAgICB9CiAgIH0KIAotICBpZiAoIGZkX252cmFtX2MgPCAwICkgewotICAgIGZkX252cmFtX2MgPSBvcGVuKFRBUkdFVF9OVlJBTV9NVERDLCAoT19SRFdSIHwgT19TWU5DKSApOwotICAgIGlmKCBmZF9udnJhbV9jIDwgMCApIHsKLSAgICAgIHByaW50ZiggIkZhaWxlZCB0byBvcGVuIVxuIiApOwotICAgICAgcmV0dXJuIC0xOwotICAgIH0KLSAgfQotCi0gIHJldCA9IGlvY3RsKGZkX252cmFtX2MsIE1FTUdFVElORk8sKHZvaWQgKikmaW5mbyk7CisgIHJldCA9IGxzZWVrKGZkX252cmFtLCBvZmZzZXQsIFNFRUtfU0VUKTsKICAgaWYocmV0IDwgMCkgewotICAgIHByaW50ZigiY2FuJ3QgZ2V0IGluZm8gZGF0YSEgKCVkKVxuIiwgcmV0KTsKKyAgICBwZXJyb3IoImxzZWVrIik7CiAgICAgcmV0dXJuIC0xOwogICB9CiAKLSAgcmVtYWluX3NpemUgPSBzaXplOwotICBtb3Zfb2Zmc2V0ID0gb2Zmc2V0OwotCi0gIHdoaWxlKHJlbWFpbl9zaXplID4gMCkgewotICAgIC8qIG9mZnNldMDMIGJsb2NrILPRvu68rbjpIL7Itci02S4uICovCi0gICAgd3JpdGVfc2l6ZSA9IGluZm8uZXJhc2VzaXplOwotICAgIHdyaXRlX3NpemUgLT0gKChtb3Zfb2Zmc2V0ICsgaW5mby5lcmFzZXNpemUpJWluZm8uZXJhc2VzaXplKTsKLQotICAgIC8qILi2wfa4t8C6ILOquNPB9iC4uMWtLi4gKi8KLSAgICBpZiggcmVtYWluX3NpemUgPCB3cml0ZV9zaXplKSB7Ci0gICAgICB3cml0ZV9zaXplID0gcmVtYWluX3NpemU7Ci0gICAgfQotCi0gICAgaWYgKGxpYnVwZ3JhZGVfdmVyYm9zZSkgewotICAgICAgcHJpbnRmKCIgd3JpdGUgOiBvZmZzZXQgLSAweCV4LCBzaXplICVkXG4iLCBtb3Zfb2Zmc2V0LCB3cml0ZV9zaXplKTsKLSAgICB9Ci0KLSAgICByZXQgPSBsc2VlayhmZF9udnJhbSwgbW92X29mZnNldCwgU0VFS19TRVQpOwotICAgIGlmKHJldCA8IDApIHsKLSAgICAgIHByaW50ZigiY2FuJ3Qgc2VlayBwb3NpdGlvbiEgKCVkKVxuIiwgcmV0KTsKLSAgICAgIHJldHVybiAtMTsKLSAgICB9Ci0KLSAgICByZXQgPSB3cml0ZShmZF9udnJhbSwgZGF0YSsobW92X29mZnNldC1vZmZzZXQpLCB3cml0ZV9zaXplKTsKLSAgICBpZihyZXQgPCAwKSB7Ci0gICAgICBwcmludGYoImNhbid0IHdyaXRlIGRhdGEhICglZClcbiIsIHJldCk7Ci0gICAgICByZXR1cm4gLTE7Ci0gICAgfQotCi0gICAgbW92X29mZnNldCArPSB3cml0ZV9zaXplOwotICAgIHJlbWFpbl9zaXplIC09IHdyaXRlX3NpemU7CisgIHJldCA9IHdyaXRlKGZkX252cmFtLCBkYXRhLCBzaXplKTsKKyAgaWYocmV0IDwgMCkgeworICAgIHBlcnJvcigid3JpdGUiKTsKKyAgICByZXR1cm4gLTE7CiAgIH0KIAogICByZXR1cm4gMDsKQEAgLTE5MCw3ICsxNDksNiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHNpemUgKQogewogICBpbnQgcmV0OwotICBzdHJ1Y3QgbXRkX2luZm9fdXNlciBpbmZvOwogICB1bnNpZ25lZCBsb25nIGJsb2NrX3NpemUsIHdyaXRlX3NpemU7CiAgIHVuc2lnbmVkIGxvbmcgbW92X29mZnNldCwgcmVtYWluX3NpemU7CiAKQEAgLTE5OCwxMCArMTU2LDEwIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX0ZVTkNUSU9OX18sIG9mZnNldCwgc2l6ZSwgZGF0YVswXSApOwogCiAgIC8qICovCi0gIGlmICggZmRfbnZyYW0gPT0gMCApIHsKKyAgaWYgKCBmZF9udnJhbSA8IDAgKSB7CiAgICAgZmRfbnZyYW0gPSBvcGVuKFRBUkdFVF9OVlJBTV9NVEQsIChPX1JEV1IgfCBPX1NZTkMpICk7CiAgICAgaWYoIGZkX252cmFtIDwgMCApIHsKLSAgICAgIHByaW50ZiggIkZhaWxlZCB0byBvcGVuIVxuIiApOworICAgICAgcGVycm9yKFRBUkdFVF9OVlJBTV9NVEQpOwogICAgICAgcmV0dXJuIC0xOwogICAgIH0KICAgfQpAQCAtMjA5LDEzICsxNjcsMTMgQEAKIAogICByZXQgPSBsc2VlayhmZF9udnJhbSwgb2Zmc2V0LCBTRUVLX1NFVCk7CiAgIGlmKHJldCA8IDApIHsKLSAgICBwcmludGYoImNhbid0IHNlZWsgcG9zaXRpb24hICglZClcbiIsIHJldCk7CisgICAgcGVycm9yKGxzZWVrKTsKICAgICByZXR1cm4gLTE7CiAgIH0KIAogICByZXQgPSByZWFkKGZkX252cmFtLCBkYXRhLCBzaXplKTsKICAgaWYocmV0IDwgMCkgewotICAgIHByaW50ZigiY2FuJ3QgcmVhZCBkYXRhISAoJWQpXG4iLCByZXQpOworICAgIHBlcnJvcigicmVhZCIpOwogICAgIHJldHVybiByZXQ7CiAgIH0KIAo=