ZGlmZiAtLWdpdCBhL2NvcmUvTWFrZWZpbGUgYi9jb3JlL01ha2VmaWxlCmluZGV4IGI1YTdlNzQuLmNjYjRjM2UgMTAwNjQ0Ci0tLSBhL2NvcmUvTWFrZWZpbGUKKysrIGIvY29yZS9NYWtlZmlsZQpAQCAtMzU1Nyw2ICszNTU3LDI0IEBACiBlbmRlZgogCiAkKGV2YWwgJChjYWxsIHdyaXRlLXBhcnRpdGlvbi1maWxlLWxpc3QsJChzeXN0ZW1pbWFnZV9pbnRlcm1lZGlhdGVzKS9maWxlX2xpc3QudHh0LCQoVEFSR0VUX09VVCksJChGVUxMX1NZU1RFTUlNQUdFX0RFUFMpKSkKKworaWZuZXEgKCQoUFJPRFVDVF9TT09OR19ERUZJTkVEX1NZU1RFTV9JTUFHRSksKQorZmlsZV9saXN0X2RpZmYgOj0gJChIT1NUX09VVF9FWEVDVVRBQkxFUykvZmlsZV9saXN0X2RpZmYkKEhPU1RfRVhFQ1VUQUJMRV9TVUZGSVgpCitzeXN0ZW1fZmlsZV9kaWZmX3RpbWVzdGFtcCA6PSAkKHN5c3RlbWltYWdlX2ludGVybWVkaWF0ZXMpL2ZpbGVfZGlmZi50aW1lc3RhbXAKKworJChzeXN0ZW1fZmlsZV9kaWZmX3RpbWVzdGFtcCk6IFwKKwkgICAgJChzeXN0ZW1pbWFnZV9pbnRlcm1lZGlhdGVzKS9maWxlX2xpc3QudHh0IFwKKwkgICAgJChBTExfTU9EVUxFUy4kKFBST0RVQ1RfU09PTkdfREVGSU5FRF9TWVNURU1fSU1BR0UpLkZJTEVTWVNURU1fRklMRUxJU1QpIFwKKwkgICAgJChBTExfTU9EVUxFUy5zeXN0ZW1faW1hZ2VfZGlmZl9hbGxvd2xpc3QuSU5TVEFMTEVEKSBcCisJICAgICQoZmlsZV9saXN0X2RpZmYpCisJJChmaWxlX2xpc3RfZGlmZikgJChzeXN0ZW1pbWFnZV9pbnRlcm1lZGlhdGVzKS9maWxlX2xpc3QudHh0IFwKKwkgICQoQUxMX01PRFVMRVMuJChQUk9EVUNUX1NPT05HX0RFRklORURfU1lTVEVNX0lNQUdFKS5GSUxFU1lTVEVNX0ZJTEVMSVNUKSBcCisJICAkKEFMTF9NT0RVTEVTLnN5c3RlbV9pbWFnZV9kaWZmX2FsbG93bGlzdC5JTlNUQUxMRUQpICQoUFJPRFVDVF9TT09OR19ERUZJTkVEX1NZU1RFTV9JTUFHRSkKKwl0b3VjaCAkQAorCiskKEJVSUxUX1NZU1RFTUlNQUdFKTogJChzeXN0ZW1fZmlsZV9kaWZmX3RpbWVzdGFtcCkKK2VuZGlmCisKICMgVXNlZCBieSBzb29uZyBzYW5kd2ljaCB0byByZXF1ZXN0IHRoZSBzdGFnaW5nIGRpciBiZSBidWlsdAogJChzeXN0ZW1pbWFnZV9pbnRlcm1lZGlhdGVzKS9zdGFnaW5nX2Rpci5zdGFtcDogJChmaWx0ZXIgJChUQVJHRVRfT1VUKS8lLCQoRlVMTF9TWVNURU1JTUFHRV9ERVBTKSkKIAl0b3VjaCAkQApkaWZmIC0tZ2l0IGEvY29yZS9iYXNlX3J1bGVzLm1rIGIvY29yZS9iYXNlX3J1bGVzLm1rCmluZGV4IGE4Y2Y2N2UuLmE5ZDY0OTQgMTAwNjQ0Ci0tLSBhL2NvcmUvYmFzZV9ydWxlcy5taworKysgYi9jb3JlL2Jhc2VfcnVsZXMubWsKQEAgLTEwNTksNiArMTA1OSwxMSBAQAogICAgICAgJChBTExfTU9EVUxFUy4kKG15X3JlZ2lzdGVyX25hbWUpLkFDT05GSUdfRklMRVMpICQoTE9DQUxfQUNPTkZJR19GSUxFUykKIGVuZGlmCiAKK2lmZGVmIExPQ0FMX0ZJTEVTWVNURU1fRklMRUxJU1QKKyAgQUxMX01PRFVMRVMuJChteV9yZWdpc3Rlcl9uYW1lKS5GSUxFU1lTVEVNX0ZJTEVMSVNUIDo9IFwKKyAgICAgICQoQUxMX01PRFVMRVMuJChteV9yZWdpc3Rlcl9uYW1lKS5GSUxFU1lTVEVNX0ZJTEVMSVNUKSAkKExPQ0FMX0ZJTEVTWVNURU1fRklMRUxJU1QpCitlbmRpZgorCiBpZm5kZWYgTE9DQUxfU09PTkdfTU9EVUxFX0lORk9fSlNPTgogICBBTExfTUFLRV9NT0RVTEVfSU5GT19KU09OX01PRFVMRVMgKz0gJChteV9yZWdpc3Rlcl9uYW1lKQogICBBTExfTU9EVUxFUy4kKG15X3JlZ2lzdGVyX25hbWUpLlNIQVJFRF9MSUJTIDo9IFwKZGlmZiAtLWdpdCBhL2NvcmUvY2xlYXJfdmFycy5tayBiL2NvcmUvY2xlYXJfdmFycy5tawppbmRleCA2MTkyNjkwLi5mZWQxOWU2IDEwMDY0NAotLS0gYS9jb3JlL2NsZWFyX3ZhcnMubWsKKysrIGIvY29yZS9jbGVhcl92YXJzLm1rCkBAIC04Nyw2ICs4Nyw3IEBACiBMT0NBTF9FWFRSQV9GVUxMX1RFU1RfQ09ORklHUzo9CiBMT0NBTF9FWFRSQUNUX0FQSzo9CiBMT0NBTF9FWFRSQUNUX0RQSV9BUEs6PQorTE9DQUxfRklMRVNZU1RFTV9GSUxFTElTVDo9CiBMT0NBTF9GSU5EQlVHU19GTEFHUzo9CiBMT0NBTF9GT1JDRV9TVEFUSUNfRVhFQ1VUQUJMRTo9CiBMT0NBTF9GVUxMX0NMQVNTRVNfSkFDT0NPX0pBUjo9CmRpZmYgLS1naXQgYS9jb3JlL3Byb2R1Y3QubWsgYi9jb3JlL3Byb2R1Y3QubWsKaW5kZXggNWNlY2NiZi4uYWQ4MGVlNCAxMDA2NDQKLS0tIGEvY29yZS9wcm9kdWN0Lm1rCisrKyBiL2NvcmUvcHJvZHVjdC5tawpAQCAtNDkyLDYgKzQ5Miw5IEBACiAjIGJ5IHRoaXMgZmxhZy4KIF9wcm9kdWN0X3NpbmdsZV92YWx1ZV92YXJzICs9IFBST0RVQ1RfTk9UX0RFQlVHR0FCTEVfSU5fVVNFUkRFQlVHCiAKKyMgSWYgc2V0LCBidWlsZCB3b3VsZCBnZW5lcmF0ZSBzeXN0ZW0gaW1hZ2UgZnJvbSBTb29uZy1kZWZpbmVkIG1vZHVsZS4KK19wcm9kdWN0X3NpbmdsZV92YWx1ZV92YXJzICs9IFBST0RVQ1RfU09PTkdfREVGSU5FRF9TWVNURU1fSU1BR0UKKwogLktBVElfUkVBRE9OTFkgOj0gX3Byb2R1Y3Rfc2luZ2xlX3ZhbHVlX3ZhcnMgX3Byb2R1Y3RfbGlzdF92YXJzCiBfcHJvZHVjdF92YXJfbGlzdCA6PSQ9ICQoX3Byb2R1Y3Rfc2luZ2xlX3ZhbHVlX3ZhcnMpICQoX3Byb2R1Y3RfbGlzdF92YXJzKQogCmRpZmYgLS1naXQgYS90b29scy9hY29uZmlnL2Fjb25maWcvc3JjL2NvZGVnZW4vamF2YS5ycyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZy9zcmMvY29kZWdlbi9qYXZhLnJzCmluZGV4IDMzNjBkZGQuLmQzZjA3NGEgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZy9zcmMvY29kZWdlbi9qYXZhLnJzCisrKyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZy9zcmMvY29kZWdlbi9qYXZhLnJzCkBAIC01MDUsMTEgKzUwNSwxMSBAQAogICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAgIFByb3BlcnRpZXMgcHJvcGVydGllcyA9IERldmljZUNvbmZpZy5nZXRQcm9wZXJ0aWVzKCJhY29uZmlnX3Rlc3QiKTsKICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWRSdyA9Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzLmdldEJvb2xlYW4oImNvbS5hbmRyb2lkLmFjb25maWcudGVzdC5kaXNhYmxlZF9ydyIsIGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXMuZ2V0Qm9vbGVhbihGbGFncy5GTEFHX0RJU0FCTEVEX1JXLCBmYWxzZSk7CiAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkUndFeHBvcnRlZCA9Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzLmdldEJvb2xlYW4oImNvbS5hbmRyb2lkLmFjb25maWcudGVzdC5kaXNhYmxlZF9yd19leHBvcnRlZCIsIGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXMuZ2V0Qm9vbGVhbihGbGFncy5GTEFHX0RJU0FCTEVEX1JXX0VYUE9SVEVELCBmYWxzZSk7CiAgICAgICAgICAgICAgICAgICAgIGVuYWJsZWRSdyA9Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzLmdldEJvb2xlYW4oImNvbS5hbmRyb2lkLmFjb25maWcudGVzdC5lbmFibGVkX3J3IiwgdHJ1ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzLmdldEJvb2xlYW4oRmxhZ3MuRkxBR19FTkFCTEVEX1JXLCB0cnVlKTsKICAgICAgICAgICAgICAgICB9IGNhdGNoIChOdWxsUG9pbnRlckV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKAogICAgICAgICAgICAgICAgICAgICAgICAgIkNhbm5vdCByZWFkIHZhbHVlIGZyb20gbmFtZXNwYWNlIGFjb25maWdfdGVzdCAiCkBAIC01MjcsNyArNTI3LDcgQEAKICAgICAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgICAgICBQcm9wZXJ0aWVzIHByb3BlcnRpZXMgPSBEZXZpY2VDb25maWcuZ2V0UHJvcGVydGllcygib3RoZXJfbmFtZXNwYWNlIik7CiAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkUndJbk90aGVyTmFtZXNwYWNlID0KLSAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXMuZ2V0Qm9vbGVhbigiY29tLmFuZHJvaWQuYWNvbmZpZy50ZXN0LmRpc2FibGVkX3J3X2luX290aGVyX25hbWVzcGFjZSIsIGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXMuZ2V0Qm9vbGVhbihGbGFncy5GTEFHX0RJU0FCTEVEX1JXX0lOX09USEVSX05BTUVTUEFDRSwgZmFsc2UpOwogICAgICAgICAgICAgICAgIH0gY2F0Y2ggKE51bGxQb2ludGVyRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oCiAgICAgICAgICAgICAgICAgICAgICAgICAiQ2Fubm90IHJlYWQgdmFsdWUgZnJvbSBuYW1lc3BhY2Ugb3RoZXJfbmFtZXNwYWNlICIKQEAgLTcwMCwxMSArNzAwLDExIEBACiAgICAgICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICAgICAgUHJvcGVydGllcyBwcm9wZXJ0aWVzID0gRGV2aWNlQ29uZmlnLmdldFByb3BlcnRpZXMoImFjb25maWdfdGVzdCIpOwogICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZFJ3RXhwb3J0ZWQgPQotICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydGllcy5nZXRCb29sZWFuKCJjb20uYW5kcm9pZC5hY29uZmlnLnRlc3QuZGlzYWJsZWRfcndfZXhwb3J0ZWQiLCBmYWxzZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzLmdldEJvb2xlYW4oRmxhZ3MuRkxBR19ESVNBQkxFRF9SV19FWFBPUlRFRCwgZmFsc2UpOwogICAgICAgICAgICAgICAgICAgICBlbmFibGVkRml4ZWRSb0V4cG9ydGVkID0KLSAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXMuZ2V0Qm9vbGVhbigiY29tLmFuZHJvaWQuYWNvbmZpZy50ZXN0LmVuYWJsZWRfZml4ZWRfcm9fZXhwb3J0ZWQiLCBmYWxzZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzLmdldEJvb2xlYW4oRmxhZ3MuRkxBR19FTkFCTEVEX0ZJWEVEX1JPX0VYUE9SVEVELCBmYWxzZSk7CiAgICAgICAgICAgICAgICAgICAgIGVuYWJsZWRSb0V4cG9ydGVkID0KLSAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXMuZ2V0Qm9vbGVhbigiY29tLmFuZHJvaWQuYWNvbmZpZy50ZXN0LmVuYWJsZWRfcm9fZXhwb3J0ZWQiLCBmYWxzZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzLmdldEJvb2xlYW4oRmxhZ3MuRkxBR19FTkFCTEVEX1JPX0VYUE9SVEVELCBmYWxzZSk7CiAgICAgICAgICAgICAgICAgfSBjYXRjaCAoTnVsbFBvaW50ZXJFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigKICAgICAgICAgICAgICAgICAgICAgICAgICJDYW5ub3QgcmVhZCB2YWx1ZSBmcm9tIG5hbWVzcGFjZSBhY29uZmlnX3Rlc3QgIgpkaWZmIC0tZ2l0IGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnL3RlbXBsYXRlcy9GZWF0dXJlRmxhZ3NJbXBsLmphdmEudGVtcGxhdGUgYi90b29scy9hY29uZmlnL2Fjb25maWcvdGVtcGxhdGVzL0ZlYXR1cmVGbGFnc0ltcGwuamF2YS50ZW1wbGF0ZQppbmRleCA2MjM1ZTY5Li42M2M0ZjJkIDEwMDY0NAotLS0gYS90b29scy9hY29uZmlnL2Fjb25maWcvdGVtcGxhdGVzL0ZlYXR1cmVGbGFnc0ltcGwuamF2YS50ZW1wbGF0ZQorKysgYi90b29scy9hY29uZmlnL2Fjb25maWcvdGVtcGxhdGVzL0ZlYXR1cmVGbGFnc0ltcGwuamF2YS50ZW1wbGF0ZQpAQCAtMjcsNyArMjcsNyBAQAoge3sgLWZvciBmbGFnIGluIG5hbWVzcGFjZV93aXRoX2ZsYWdzLmZsYWdzIH19CiB7eyAtaWYgZmxhZy5pc19yZWFkX3dyaXRlIH19CiAgICAgICAgICAgICB7ZmxhZy5tZXRob2RfbmFtZX0gPQotICAgICAgICAgICAgICAgIHByb3BlcnRpZXMuZ2V0Qm9vbGVhbigie2ZsYWcuZGV2aWNlX2NvbmZpZ19mbGFnfSIsIHtmbGFnLmRlZmF1bHRfdmFsdWV9KTsKKyAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzLmdldEJvb2xlYW4oRmxhZ3MuRkxBR197ZmxhZy5mbGFnX25hbWVfY29uc3RhbnRfc3VmZml4fSwge2ZsYWcuZGVmYXVsdF92YWx1ZX0pOwoge3sgLWVuZGlmIH19CiB7eyAtZW5kZm9yIH19CiAgICAgICAgIH0gY2F0Y2ggKE51bGxQb2ludGVyRXhjZXB0aW9uIGUpIFx7CmRpZmYgLS1naXQgYS90b29scy9maWxlbGlzdGRpZmYvQW5kcm9pZC5icCBiL3Rvb2xzL2ZpbGVsaXN0ZGlmZi9BbmRyb2lkLmJwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzMmFkYTMKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9maWxlbGlzdGRpZmYvQW5kcm9pZC5icApAQCAtMCwwICsxLDI3IEBACisvLyBDb3B5cmlnaHQgKEMpIDIwMjQgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworcGFja2FnZSB7CisgICAgZGVmYXVsdF9hcHBsaWNhYmxlX2xpY2Vuc2VzOiBbIkFuZHJvaWQtQXBhY2hlLTIuMCJdLAorfQorCitweXRob25fYmluYXJ5X2hvc3QgeworICAgIG5hbWU6ICJmaWxlX2xpc3RfZGlmZiIsCisgICAgc3JjczogWyJmaWxlX2xpc3RfZGlmZi5weSJdLAorfQorCitwcmVidWlsdF9ldGNfaG9zdCB7CisgICAgbmFtZTogInN5c3RlbV9pbWFnZV9kaWZmX2FsbG93bGlzdCIsCisgICAgc3JjOiAiYWxsb3dsaXN0IiwKK30KZGlmZiAtLWdpdCBhL3Rvb2xzL2ZpbGVsaXN0ZGlmZi9hbGxvd2xpc3QgYi90b29scy9maWxlbGlzdGRpZmYvYWxsb3dsaXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhNTFkMGUKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9maWxlbGlzdGRpZmYvYWxsb3dsaXN0CkBAIC0wLDAgKzEsODMgQEAKKyMgS25vd24gZGlmZnMgb25seSBpbiB0aGUgS0FUSSBzeXN0ZW0gaW1hZ2UKK2V0Yy9OT1RJQ0UueG1sLmd6CitldGMvY29tcGF0Y29uZmlnL1RlbGVTZXJ2aWNlLXBsYXRmb3JtLWNvbXBhdC1jb25maWcueG1sCitldGMvY29tcGF0Y29uZmlnL2NhbGVuZGFyLXByb3ZpZGVyLWNvbXBhdC1jb25maWcueG1sCitldGMvY29tcGF0Y29uZmlnL2NvbnRhY3RzLXByb3ZpZGVyLXBsYXRmb3JtLWNvbXBhdC1jb25maWcueG1sCitldGMvY29tcGF0Y29uZmlnL2RvY3VtZW50cy11aS1jb21wYXQtY29uZmlnLnhtbAorZXRjL2NvbXBhdGNvbmZpZy9mcmFtZXdvcmstbG9jYXRpb24tY29tcGF0LWNvbmZpZy54bWwKK2V0Yy9jb21wYXRjb25maWcvZnJhbWV3b3JrLXBsYXRmb3JtLWNvbXBhdC1jb25maWcueG1sCitldGMvY29tcGF0Y29uZmlnL2ljdTRqLXBsYXRmb3JtLWNvbXBhdC1jb25maWcueG1sCitldGMvY29tcGF0Y29uZmlnL3NlcnZpY2VzLXBsYXRmb3JtLWNvbXBhdC1jb25maWcueG1sCitldGMvcGVybWlzc2lvbnMvYW5kcm9pZC5zb2Z0d2FyZS5jcmVkZW50aWFscy54bWwKK2V0Yy9wZXJtaXNzaW9ucy9hbmRyb2lkLnNvZnR3YXJlLnByZXZpZXdfc2RrLnhtbAorZXRjL3Blcm1pc3Npb25zL2FuZHJvaWQuc29mdHdhcmUud2Vidmlldy54bWwKK2V0Yy9wZXJtaXNzaW9ucy9hbmRyb2lkLnNvZnR3YXJlLndpbmRvd19tYWduaWZpY2F0aW9uLnhtbAorZXRjL3Blcm1pc3Npb25zL2NvbS5hbmRyb2lkLmFkc2VydmljZXMuc2Rrc2FuZGJveC54bWwKK2V0Yy9zZWN1cml0eS9vdGFjZXJ0cy56aXAKK2V0Yy92aW50Zi9jb21wYXRpYmlsaXR5X21hdHJpeC4yMDI0MDQueG1sCitldGMvdmludGYvY29tcGF0aWJpbGl0eV9tYXRyaXguMjAyNTA0LnhtbAorZXRjL3ZpbnRmL2NvbXBhdGliaWxpdHlfbWF0cml4LjUueG1sCitldGMvdmludGYvY29tcGF0aWJpbGl0eV9tYXRyaXguNi54bWwKK2V0Yy92aW50Zi9jb21wYXRpYmlsaXR5X21hdHJpeC43LnhtbAorZXRjL3ZpbnRmL2NvbXBhdGliaWxpdHlfbWF0cml4LjgueG1sCitldGMvdmludGYvY29tcGF0aWJpbGl0eV9tYXRyaXguZGV2aWNlLnhtbAorZXRjL3ZpbnRmL21hbmlmZXN0LnhtbAorZnJhbWV3b3JrL2Jvb3QtYXBhY2hlLXhtbC52ZGV4CitmcmFtZXdvcmsvYm9vdC1hcGFjaGUteG1sLnZkZXguZnN2X21ldGEKK2ZyYW1ld29yay9ib290LWJvdW5jeWNhc3RsZS52ZGV4CitmcmFtZXdvcmsvYm9vdC1ib3VuY3ljYXN0bGUudmRleC5mc3ZfbWV0YQorZnJhbWV3b3JrL2Jvb3QtY29yZS1pY3U0ai52ZGV4CitmcmFtZXdvcmsvYm9vdC1jb3JlLWljdTRqLnZkZXguZnN2X21ldGEKK2ZyYW1ld29yay9ib290LWNvcmUtbGliYXJ0LnZkZXgKK2ZyYW1ld29yay9ib290LWNvcmUtbGliYXJ0LnZkZXguZnN2X21ldGEKK2ZyYW1ld29yay9ib290LWV4dC52ZGV4CitmcmFtZXdvcmsvYm9vdC1leHQudmRleC5mc3ZfbWV0YQorZnJhbWV3b3JrL2Jvb3QtZnJhbWV3b3JrLWFkc2VydmljZXMudmRleAorZnJhbWV3b3JrL2Jvb3QtZnJhbWV3b3JrLWFkc2VydmljZXMudmRleC5mc3ZfbWV0YQorZnJhbWV3b3JrL2Jvb3QtZnJhbWV3b3JrLWdyYXBoaWNzLnZkZXgKK2ZyYW1ld29yay9ib290LWZyYW1ld29yay1ncmFwaGljcy52ZGV4LmZzdl9tZXRhCitmcmFtZXdvcmsvYm9vdC1mcmFtZXdvcmstbG9jYXRpb24udmRleAorZnJhbWV3b3JrL2Jvb3QtZnJhbWV3b3JrLWxvY2F0aW9uLnZkZXguZnN2X21ldGEKK2ZyYW1ld29yay9ib290LWZyYW1ld29yay52ZGV4CitmcmFtZXdvcmsvYm9vdC1mcmFtZXdvcmsudmRleC5mc3ZfbWV0YQorZnJhbWV3b3JrL2Jvb3QtaW1zLWNvbW1vbi52ZGV4CitmcmFtZXdvcmsvYm9vdC1pbXMtY29tbW9uLnZkZXguZnN2X21ldGEKK2ZyYW1ld29yay9ib290LW9raHR0cC52ZGV4CitmcmFtZXdvcmsvYm9vdC1va2h0dHAudmRleC5mc3ZfbWV0YQorZnJhbWV3b3JrL2Jvb3QtdGVsZXBob255LWNvbW1vbi52ZGV4CitmcmFtZXdvcmsvYm9vdC10ZWxlcGhvbnktY29tbW9uLnZkZXguZnN2X21ldGEKK2ZyYW1ld29yay9ib290LXZvaXAtY29tbW9uLnZkZXgKK2ZyYW1ld29yay9ib290LXZvaXAtY29tbW9uLnZkZXguZnN2X21ldGEKK2ZyYW1ld29yay9ib290LnZkZXgKK2ZyYW1ld29yay9ib290LnZkZXguZnN2X21ldGEKK2ZyYW1ld29yay9vYXQveDg2XzY0L2FwZXhAY29tLmFuZHJvaWQuY29tcG9zQGphdmFsaWJAc2VydmljZS1jb21wb3MuamFyQGNsYXNzZXMub2RleAorZnJhbWV3b3JrL29hdC94ODZfNjQvYXBleEBjb20uYW5kcm9pZC5jb21wb3NAamF2YWxpYkBzZXJ2aWNlLWNvbXBvcy5qYXJAY2xhc3Nlcy5vZGV4LmZzdl9tZXRhCitmcmFtZXdvcmsvb2F0L3g4Nl82NC9hcGV4QGNvbS5hbmRyb2lkLmNvbXBvc0BqYXZhbGliQHNlcnZpY2UtY29tcG9zLmphckBjbGFzc2VzLnZkZXgKK2ZyYW1ld29yay9vYXQveDg2XzY0L2FwZXhAY29tLmFuZHJvaWQuY29tcG9zQGphdmFsaWJAc2VydmljZS1jb21wb3MuamFyQGNsYXNzZXMudmRleC5mc3ZfbWV0YQorbGliL2FhdWRpby1haWRsLWNwcC5zbworbGliL2FuZHJvaWQuaGFyZHdhcmUuYmlvbWV0cmljcy5maW5nZXJwcmludEAyLjEuc28KK2xpYi9hbmRyb2lkLmhhcmR3YXJlLnJhZGlvLmNvbmZpZ0AxLjAuc28KK2xpYi9hbmRyb2lkLmhhcmR3YXJlLnJhZGlvLmRlcHJlY2F0ZWRAMS4wLnNvCitsaWIvYW5kcm9pZC5oYXJkd2FyZS5yYWRpb0AxLjAuc28KK2xpYi9hbmRyb2lkLmhhcmR3YXJlLnJhZGlvQDEuMS5zbworbGliL2FuZHJvaWQuaGFyZHdhcmUucmFkaW9AMS4yLnNvCitsaWIvYW5kcm9pZC5oYXJkd2FyZS5yYWRpb0AxLjMuc28KK2xpYi9hbmRyb2lkLmhhcmR3YXJlLnJhZGlvQDEuNC5zbworbGliL2FuZHJvaWQuaGFyZHdhcmUuc2VjdXJlX2VsZW1lbnRAMS4wLnNvCitsaWIvY29tLmFuZHJvaWQubWVkaWEuYWF1ZGlvLWFjb25maWctY2Muc28KK2xpYi9oZWFwcHJvZmRfY2xpZW50LnNvCitsaWIvaGVhcHByb2ZkX2NsaWVudF9hcGkuc28KK2xpYi9saWJhYXVkaW8uc28KK2xpYi9saWJhYXVkaW9faW50ZXJuYWwuc28KK2xpYi9saWJhbGFybV9qbmkuc28KK2xpYi9saWJhbWlkaS5zbworbGliL2xpYmN1cHMuc28KK2xpYi9saWJqbmlfZGV2aWNlQXNXZWJjYW0uc28KK2xpYi9saWJwcmludHNwb29sZXJfam5pLnNvCitsaWIvbGlidmVuZG9yc3VwcG9ydC5zbworbGliL2xpYndmZHMuc28KK2xpYi9saWJ5dXYuc28KKworIyBLbm93biBkaWZmcyBvbmx5IGluIHRoZSBTb29uZyBzeXN0ZW0gaW1hZ2UKK2xpYi9saWJoaWRjb21tYW5kX2puaS5zbworbGliL2xpYnVpbnB1dGNvbW1hbmRfam5pLnNvClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdG9vbHMvZmlsZWxpc3RkaWZmL2ZpbGVfbGlzdF9kaWZmLnB5IGIvdG9vbHMvZmlsZWxpc3RkaWZmL2ZpbGVfbGlzdF9kaWZmLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkYzViMmUKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9maWxlbGlzdGRpZmYvZmlsZV9saXN0X2RpZmYucHkKQEAgLTAsMCArMSw2NiBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMjQgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorIworIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMKKyMgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMKKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworaW1wb3J0IGFyZ3BhcnNlCitpbXBvcnQgc3lzCisKK0NPTE9SX1dBUk5JTkcgPSAnXDAzM1s5M20nCitDT0xPUl9FUlJPUiA9ICdcMDMzWzkxbScKK0NPTE9SX05PUk1BTCA9ICdcMDMzWzBtJworCitkZWYgZmluZF91bmlxdWVfaXRlbXMoa2F0aV9pbnN0YWxsZWRfZmlsZXMsIHNvb25nX2luc3RhbGxlZF9maWxlcywgYWxsb3dsaXN0LCBzeXN0ZW1fbW9kdWxlX25hbWUpOgorICAgIHdpdGggb3BlbihrYXRpX2luc3RhbGxlZF9maWxlcywgJ3InKSBhcyBrYXRpX2xpc3RfZmlsZSwgXAorICAgICAgICAgICAgb3Blbihzb29uZ19pbnN0YWxsZWRfZmlsZXMsICdyJykgYXMgc29vbmdfbGlzdF9maWxlLCBcCisgICAgICAgICAgICBvcGVuKGFsbG93bGlzdCwgJ3InKSBhcyBhbGxvd2xpc3RfZmlsZToKKyAgICAgICAga2F0aV9maWxlcyA9IHNldChrYXRpX2xpc3RfZmlsZS5yZWFkKCkuc3BsaXQoKSkKKyAgICAgICAgc29vbmdfZmlsZXMgPSBzZXQoc29vbmdfbGlzdF9maWxlLnJlYWQoKS5zcGxpdCgpKQorICAgICAgICBhbGxvd2VkX2ZpbGVzID0gc2V0KGZpbHRlcihsYW1iZGEgeDogbGVuKHgpLCBtYXAobGFtYmRhIHg6IHgubHN0cmlwKCkuc3BsaXQoJyMnLDEpWzBdLnJzdHJpcCgpICwgYWxsb3dsaXN0X2ZpbGUucmVhZCgpLnNwbGl0KCdcbicpKSkpCisKKyAgICBkZWYgaXNfdW5rbm93bl9kaWZmKGZpbGVwYXRoKToKKyAgICAgICAgcmV0dXJuIG5vdCBmaWxlcGF0aCBpbiBhbGxvd2VkX2ZpbGVzCisKKyAgICB1bmlxdWVfaW5fa2F0aSA9IHNldChmaWx0ZXIoaXNfdW5rbm93bl9kaWZmLCBrYXRpX2ZpbGVzIC0gc29vbmdfZmlsZXMpKQorICAgIHVuaXF1ZV9pbl9zb29uZyA9IHNldChmaWx0ZXIoaXNfdW5rbm93bl9kaWZmLCBzb29uZ19maWxlcyAtIGthdGlfZmlsZXMpKQorCisgICAgaWYgdW5pcXVlX2luX2thdGk6CisgICAgICAgIHByaW50KGYne0NPTE9SX0VSUk9SfVBsZWFzZSBhZGQgZm9sbG93aW5nIG1vZHVsZXMgaW50byBzeXN0ZW0gaW1hZ2UgbW9kdWxlIHtzeXN0ZW1fbW9kdWxlX25hbWV9LntDT0xPUl9OT1JNQUx9JykKKyAgICAgICAgcHJpbnQoZid7Q09MT1JfV0FSTklOR31LQVRJIG9ubHkgbW9kdWxlKHMpOntDT0xPUl9OT1JNQUx9JykKKyAgICAgICAgZm9yIGl0ZW0gaW4gc29ydGVkKHVuaXF1ZV9pbl9rYXRpKToKKyAgICAgICAgICAgIHByaW50KGl0ZW0pCisKKyAgICBpZiB1bmlxdWVfaW5fc29vbmc6CisgICAgICAgIGlmIHVuaXF1ZV9pbl9rYXRpOgorICAgICAgICAgICAgcHJpbnQoJycpCisKKyAgICAgICAgcHJpbnQoZid7Q09MT1JfRVJST1J9UGxlYXNlIGFkZCBmb2xsb3dpbmcgbW9kdWxlcyBpbnRvIGJ1aWxkL21ha2UvdGFyZ2V0L3Byb2R1Y3QvYmFzZV9zeXN0ZW0ubWsue0NPTE9SX05PUk1BTH0nKQorICAgICAgICBwcmludChmJ3tDT0xPUl9XQVJOSU5HfVNvb25nIG9ubHkgbW9kdWxlKHMpOntDT0xPUl9OT1JNQUx9JykKKyAgICAgICAgZm9yIGl0ZW0gaW4gc29ydGVkKHVuaXF1ZV9pbl9zb29uZyk6CisgICAgICAgICAgICBwcmludChpdGVtKQorCisgICAgaWYgdW5pcXVlX2luX2thdGkgb3IgdW5pcXVlX2luX3Nvb25nOgorICAgICAgICBwcmludCgnJykKKyAgICAgICAgcHJpbnQoZid7Q09MT1JfRVJST1J9RkFJTEVEOiBTeXN0ZW0gaW1hZ2UgZnJvbSBLQVRJIGFuZCBTT09ORyBkaWZmZXJzIGZyb20gaW5zdGFsbGVkIGZpbGUgbGlzdC57Q09MT1JfTk9STUFMfScpCisgICAgICAgIHN5cy5leGl0KDEpCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcigpCisKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCdrYXRpX2luc3RhbGxlZF9maWxlX2xpc3QnKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJ3Nvb25nX2luc3RhbGxlZF9maWxlX2xpc3QnKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJ2FsbG93bGlzdCcpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnc3lzdGVtX21vZHVsZV9uYW1lJykKKyAgICBhcmdzID0gcGFyc2VyLnBhcnNlX2FyZ3MoKQorCisgICAgZmluZF91bmlxdWVfaXRlbXMoYXJncy5rYXRpX2luc3RhbGxlZF9maWxlX2xpc3QsIGFyZ3Muc29vbmdfaW5zdGFsbGVkX2ZpbGVfbGlzdCwgYXJncy5hbGxvd2xpc3QsIGFyZ3Muc3lzdGVtX21vZHVsZV9uYW1lKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rvb2xzL2lkZV9xdWVyeS9PV05FUlMgYi90b29scy9pZGVfcXVlcnkvT1dORVJTCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxNGE5YTIKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9pZGVfcXVlcnkvT1dORVJTCkBAIC0wLDAgKzEsNCBAQAoraWFsaXlldkBnb29nbGUuY29tCitpdmFua2lyaWNoZW5rb0Bnb29nbGUuY29tCitrYWRpcmNldEBnb29nbGUuY29tCittaWNoYWVsbWVyZ0Bnb29nbGUuY29tCmRpZmYgLS1naXQgYS90b29scy9pZGVfcXVlcnkvcHJvYmVyX3NjcmlwdHMvY3BwL0FuZHJvaWQuYnAgYi90b29scy9pZGVfcXVlcnkvcHJvYmVyX3NjcmlwdHMvY3BwL0FuZHJvaWQuYnAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTE5MDIxMAotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2lkZV9xdWVyeS9wcm9iZXJfc2NyaXB0cy9jcHAvQW5kcm9pZC5icApAQCAtMCwwICsxLDMxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDI0IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworcGFja2FnZSB7CisgICAgZGVmYXVsdF9hcHBsaWNhYmxlX2xpY2Vuc2VzOiBbIkFuZHJvaWQtQXBhY2hlLTIuMCJdLAorfQorCitjY19iaW5hcnkgeworICAgIG5hbWU6ICJpZGVfcXVlcnlfcHJvYmVyc2NyaXB0X2NjIiwKKyAgICBzcmNzOiBbCisgICAgICAgICJnZW5lcmFsLmNjIiwKKyAgICAgICAgImZvby5wcm90byIsCisgICAgXSwKKyAgICBjZmxhZ3M6IFsiLVduby11bnVzZWQtcGFyYW1ldGVyIl0sCisgICAgcHJvdG86IHsKKyAgICAgICAgdHlwZTogImxpdGUiLAorICAgIH0sCit9CmRpZmYgLS1naXQgYS90b29scy9pZGVfcXVlcnkvcHJvYmVyX3NjcmlwdHMvY3BwL2Zvby5wcm90byBiL3Rvb2xzL2lkZV9xdWVyeS9wcm9iZXJfc2NyaXB0cy9jcHAvZm9vLnByb3RvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhODUxNDcKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9pZGVfcXVlcnkvcHJvYmVyX3NjcmlwdHMvY3BwL2Zvby5wcm90bwpAQCAtMCwwICsxLDI1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDI0IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworc3ludGF4ID0gInByb3RvMyI7CisKK3BhY2thZ2UgaWRlX3F1ZXJ5LnByb2Jlcl9zY3JpcHRzOworCittZXNzYWdlIFByb3RvTXNnIHsKKyAgLy8gVGVzdCBwcm90byBmaWVsZC4KKyAgaW50NjQgc29tZV9maWVsZCA9IDE7CisgIC8vICAgICAgICAgICAgICAgICAgIF4gc29tZV9maWVsZAorfQpkaWZmIC0tZ2l0IGEvdG9vbHMvaWRlX3F1ZXJ5L3Byb2Jlcl9zY3JpcHRzL2NwcC9nZW5lcmFsLmNjIGIvdG9vbHMvaWRlX3F1ZXJ5L3Byb2Jlcl9zY3JpcHRzL2NwcC9nZW5lcmFsLmNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmMDYzOWIKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9pZGVfcXVlcnkvcHJvYmVyX3NjcmlwdHMvY3BwL2dlbmVyYWwuY2MKQEAgLTAsMCArMSwxMTkgQEAKKy8vIENvcHlyaWdodCAoQykgMjAyNCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisvLworLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCisjaW5jbHVkZSA8dmVjdG9yPgorCisjaW5jbHVkZSAiZm9vLnBiLmgiCisKK3VzaW5nIGlkZV9xdWVyeTo6cHJvYmVyX3NjcmlwdHM6OlByb3RvTXNnOworCit2b2lkIEZvbyhpbnQgeCwgZG91YmxlIHkpIHt9CitmbG9hdCBGb28oZmxvYXQgeCwgZmxvYXQgeSkgeyByZXR1cm4gMC4wZjsgfQorCit2b2lkIFRlc3RDb21wbGV0aW9uKCkgeworICAvLyBUZXN0IGNvbXBsZXRpb24gb24gcHJvdG9zIGFuZCBmdXp6eSBtYXRjaGluZyBvZiBjb21wbGV0aW9uIHN1Z2dlc3Rpb25zLgorCisgIFByb3RvTXNnIGZvbzsKKworICAvLyBeCisKKyAgLy8gc3RlcAorICAvLyB3b3Jrc3BhY2Uud2FpdEZvclJlYWR5KCkKKyAgLy8gdHlwZSgiZiIpCisgIC8vIGNvbXBsZXRpb24udHJpZ2dlcigpCisgIC8vIGFzc2VydCBjb21wbGV0aW9uLml0ZW1zLmZpbHRlcihsYWJlbD0iZm9vIikKKyAgLy8gZGVsbGluZSgpCisgIC8vIHR5cGUoImZvby5zZiIpCisgIC8vIGNvbXBsZXRpb24udHJpZ2dlcigpCisgIC8vIGFzc2VydCBjb21wbGV0aW9uLml0ZW1zLmZpbHRlcigKKyAgLy8gIGxhYmVsPSJzb21lX2ZpZWxkLioiLAorICAvLyAgaW5zZXJ0VGV4dD0ic29tZV9maWVsZC4qIiwKKyAgLy8gKQorICAvLyBkZWxsaW5lKCkKKworICBzdGQ6OnZlY3RvcjxpbnQ+IHY7CisKKyAgLy8gXgorCisgIC8vIHN0ZXAKKyAgLy8gd29ya3NwYWNlLndhaXRGb3JSZWFkeSgpCisgIC8vIHR5cGUoInYucHVzaCIpCisgIC8vIGNvbXBsZXRpb24udHJpZ2dlcigpCisgIC8vIGFzc2VydCBjb21wbGV0aW9uLml0ZW1zLmZpbHRlcihsYWJlbD0icHVzaF9iYWNrLioiKQorICAvLyBkZWxsaW5lKCkKK30KKwordm9pZCBUZXN0TmF2aWdhdGlvbigpIHsKKyAgc3RkOjp2ZWN0b3I8aW50PiBpbnRzOworICAvLyAgICAgICAgICAgICAgIHwgICB8IGludHMKKyAgLy8gICAgICBeCisKKyAgLy8gc3RlcAorICAvLyA7IFRlc3QgbmF2aWdhdGlvbiB0byBkZWZpbml0aW9uIG9uIFNUTCB0eXBlcy4KKyAgLy8gd29ya3NwYWNlLndhaXRGb3JSZWFkeSgpCisgIC8vIG5hdmlnYXRpb24udHJpZ2dlcigpCisgIC8vIGFzc2VydCBuYXZpZ2F0aW9uLml0ZW1zLmZpbHRlcihwYXRoPSIuKi92ZWN0b3IiKQorCisgIGludHMucHVzaF9iYWNrKDApOworICAvLyBeCisKKyAgLy8gc3RlcAorICAvLyA7IFRlc3QgbmF2aWdhdGlvbiB0byBkZWZpbml0aW9uIG9uIGxvY2FsIHN5bWJvbHMuCisgIC8vIHdvcmtzcGFjZS53YWl0Rm9yUmVhZHkoKQorICAvLyBuYXZpZ2F0aW9uLnRyaWdnZXIoKQorICAvLyBhc3NlcnQgbmF2aWdhdGlvbi5pdGVtcy5maWx0ZXIocGF0aD0iLiovZ2VuZXJhbC5jYyIsIHJhbmdlPWludHMpCisKKyAgUHJvdG9Nc2cgbXNnOworICBtc2cuc2V0X3NvbWVfZmllbGQoMCk7CisgIC8vICAgICAgICAgIF4KKworICAvLyBzdGVwCisgIC8vIDsgVGVzdCBuYXZpZ2F0aW9uIHRvIGRlZmluaXRpb24gb24gcHJvdG8gZmllbGRzLiBXZSBkbyBub3QgY2hlY2sgZm9yIGEKKyAgLy8gOyBzcGVjaWZpYyB0YXJnZXQgYXMgaXQgY2FuIGJlIGluIGdlbmVyYXRlZCBjb2RlLgorICAvLyB3b3Jrc3BhY2Uud2FpdEZvclJlYWR5KCkKKyAgLy8gbmF2aWdhdGlvbi50cmlnZ2VyKCkKKyAgLy8gYXNzZXJ0IG5hdmlnYXRpb24uaXRlbXMKK30KKwordm9pZCBUZXN0UGFyYW1ldGVySW5mbygpIHsKKyAgc3RkOjp2ZWN0b3I8aW50PiB2OworICB2LnB1c2hfYmFjaygwKTsKKyAgLy8gICAgICAgICAgXgorCisgIC8vIHN0ZXAKKyAgLy8gOyBUZXN0IHRoZSBzaWduYXR1cmUgaGVscCBmb3IgU1RMIGZ1bmN0aW9ucy4gV2UgZG8gbm90IGNoZWNrIGZvciBhIHNwZWNpZmljCisgIC8vIDsgdGV4dCBhcyBpdCBjYW4gYmUgaW1wbGVtZW50YXRpb24tZGVwZW5kZW50LgorICAvLyB3b3Jrc3BhY2Uud2FpdEZvclJlYWR5KCkKKyAgLy8gcGFyYW1pbmZvLnRyaWdnZXIoKQorICAvLyBhc3NlcnQgcGFyYW1pbmZvLml0ZW1zCisKKyAgRm9vKDAsIDAuMCk7CisgIC8vICAgICAgXgorCisgIC8vIHN0ZXAKKyAgLy8gOyBUZXN0IHRoZSBzaWduYXR1cmUgaGVscCBmb3IgdGhlIGZ1bmN0aW9uICdGb28nIGhhdmluZyB0d28gb3ZlcmxvYWRzLgorICAvLyB3b3Jrc3BhY2Uud2FpdEZvclJlYWR5KCkKKyAgLy8gcGFyYW1pbmZvLnRyaWdnZXIoKQorICAvLyBhc3NlcnQgcGFyYW1pbmZvLml0ZW1zLmZpbHRlcigKKyAgLy8gIGFjdGl2ZT10cnVlLAorICAvLyAgbGFiZWw9IkZvb1xcKGludCB4LCBkb3VibGUgeVxcKSAtPiB2b2lkIiwKKyAgLy8gIHNlbGVjdGlvbj0iZG91YmxlIHkiLAorICAvLyApCisgIC8vIGFzc2VydCBwYXJhbWluZm8uaXRlbXMuZmlsdGVyKAorICAvLyAgYWN0aXZlPWZhbHNlLAorICAvLyAgbGFiZWw9IkZvb1xcKGZsb2F0IHgsIGZsb2F0IHlcXCkgLT4gZmxvYXQiLAorICAvLyApCit9CisKK2ludCBtYWluKCkgeyByZXR1cm4gMDsgfQpkaWZmIC0tZ2l0IGEvdG9vbHMvaWRlX3F1ZXJ5L3Byb2Jlcl9zY3JpcHRzL2NwcF9zdWl0ZS50ZXh0cGIgYi90b29scy9pZGVfcXVlcnkvcHJvYmVyX3NjcmlwdHMvY3BwX3N1aXRlLnRleHRwYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44Mzc3MjY5Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvaWRlX3F1ZXJ5L3Byb2Jlcl9zY3JpcHRzL2NwcF9zdWl0ZS50ZXh0cGIKQEAgLTAsMCArMSw1IEBACit0ZXN0czogeworICBuYW1lOiAiZ2VuZXJhbCIKKyAgc2NyaXB0czogImJ1aWxkL21ha2UvdG9vbHMvaWRlX3F1ZXJ5L3Byb2Jlcl9zY3JpcHRzL2NwcC9nZW5lcmFsLmNjIgorICBzY3JpcHRzOiAiYnVpbGQvbWFrZS90b29scy9pZGVfcXVlcnkvcHJvYmVyX3NjcmlwdHMvY3BwL2Zvby5wcm90byIKK30KZGlmZiAtLWdpdCBhL3Rvb2xzL2lkZV9xdWVyeS9wcm9iZXJfc2NyaXB0cy9pZGVfcXVlcnkub3V0IGIvdG9vbHMvaWRlX3F1ZXJ5L3Byb2Jlcl9zY3JpcHRzL2lkZV9xdWVyeS5vdXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Q3Y2U2ZAotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2lkZV9xdWVyeS9wcm9iZXJfc2NyaXB0cy9pZGVfcXVlcnkub3V0CkBAIC0wLDAgKzEsMjM5IEBACisKKwNvdXQSlmEKKzhidWlsZC9tYWtlL3Rvb2xzL2lkZV9xdWVyeS9wcm9iZXJfc2NyaXB0cy9jcHAvZ2VuZXJhbC5jYxo4cHJlYnVpbHRzL2NsYW5nL2hvc3QvbGludXgteDg2L2NsYW5nLXI1MjI4MTcvYmluL2NsYW5nKysaBy1tdGh1bWIaAy1PcxoULWZvbWl0LWZyYW1lLXBvaW50ZXIaBi1tbGx2bRoZLWVuYWJsZS1zaHJpbmstd3JhcD1mYWxzZRoDLU8yGgUtV2FsbBoHLVdleHRyYRoLLVdpbml0LXNlbGYaDy1XcG9pbnRlci1hcml0aBoYLVd1bmd1YXJkZWQtYXZhaWxhYmlsaXR5GhEtV2Vycm9yPWRhdGUtdGltZRoWLVdlcnJvcj1pbnQtY29udmVyc2lvbhoTLVdlcnJvcj1wcmFnbWEtcGFjaxomLVdlcnJvcj1wcmFnbWEtcGFjay1zdXNwaWNpb3VzLWluY2x1ZGUaGC1XZXJyb3I9c2l6ZW9mLWFycmF5LWRpdhoXLVdlcnJvcj1zdHJpbmctcGx1cy1pbnQaJy1XZXJyb3I9dW5yZWFjaGFibGUtY29kZS1sb29wLWluY3JlbWVudBoiLVduby1lcnJvcj1kZXByZWNhdGVkLWRlY2xhcmF0aW9ucxoTLVduby1jOTktZGVzaWduYXRvchoZLVduby1nbnUtZm9sZGluZy1jb25zdGFudBoiLVduby1pbmNvbnNpc3RlbnQtbWlzc2luZy1vdmVycmlkZRocLVduby1lcnJvcj1yZW9yZGVyLWluaXQtbGlzdBoWLVduby1yZW9yZGVyLWluaXQtbGlzdBoRLVduby1zaWduLWNvbXBhcmUaCy1Xbm8tdW51c2VkGgktREFORFJPSUQaCC1ETkRFQlVHGgctVURFQlVHGigtRF9fY29tcGlsZXJfb2Zmc2V0b2Y9X19idWlsdGluX29mZnNldG9mGiotRF9fQU5EUk9JRF9VTkFWQUlMQUJMRV9TWU1CT0xTX0FSRV9XRUFLX18aCS1mYWRkcnNpZxoZLWZkZWJ1Zy1kZWZhdWx0LXZlcnNpb249NRoTLWZjb2xvci1kaWFnbm9zdGljcxoRLWZmcC1jb250cmFjdD1vZmYaDy1mbm8tZXhjZXB0aW9ucxoULWZuby1zdHJpY3QtYWxpYXNpbmcaEi1mbWVzc2FnZS1sZW5ndGg9MBojLWZuby1yZWxheGVkLXRlbXBsYXRlLXRlbXBsYXRlLWFyZ3MaFy1nc2ltcGxlLXRlbXBsYXRlLW5hbWVzGggtZ3o9enN0ZBoWLW5vLWNhbm9uaWNhbC1wcmVmaXhlcxoRLVduby1lcnJvcj1mb3JtYXQaIi1mZGVidWctcHJlZml4LW1hcD0vcHJvYy9zZWxmL2N3ZD0aHC1mdHJpdmlhbC1hdXRvLXZhci1pbml0PXplcm8aAi1nGhMtZmZ1bmN0aW9uLXNlY3Rpb25zGg8tZmRhdGEtc2VjdGlvbnMaEC1mbm8tc2hvcnQtZW51bXMaDy1mdW53aW5kLXRhYmxlcxoYLWZzdGFjay1wcm90ZWN0b3Itc3Ryb25nGhEtV2EsLS1ub2V4ZWNzdGFjaxoTLURfRk9SVElGWV9TT1VSQ0U9MhoTLVdzdHJpY3QtYWxpYXNpbmc9MhoTLVdlcnJvcj1yZXR1cm4tdHlwZRoYLVdlcnJvcj1ub24tdmlydHVhbC1kdG9yGg8tV2Vycm9yPWFkZHJlc3MaFi1XZXJyb3I9c2VxdWVuY2UtcG9pbnQaFy1XZXJyb3I9Zm9ybWF0LXNlY3VyaXR5Ggwtbm9zdGRsaWJpbmMaGi1mZGVidWctaW5mby1mb3ItcHJvZmlsaW5nGgwtbXNvZnQtZmxvYXQaDi1tYXJjaD1hcm12Ny1hGhItbWZsb2F0LWFiaT1zb2Z0ZnAaCistbWZwdT1uZW9uGi8tSWJ1aWxkL21ha2UvdG9vbHMvaWRlX3F1ZXJ5L3Byb2Jlcl9zY3JpcHRzL2NwcBqzAS1Jb3V0L3Nvb25nLy5pbnRlcm1lZGlhdGVzL2J1aWxkL21ha2UvdG9vbHMvaWRlX3F1ZXJ5L3Byb2Jlcl9zY3JpcHRzL2NwcC9pZGVfcXVlcnlfcHJvYmVyc2NyaXB0X2NjL2FuZHJvaWRfYXJtX2FybXY3LWEtbmVvbi9nZW4vcHJvdG8vYnVpbGQvbWFrZS90b29scy9pZGVfcXVlcnkvcHJvYmVyX3NjcmlwdHMvY3BwGoUBLUlvdXQvc29vbmcvLmludGVybWVkaWF0ZXMvYnVpbGQvbWFrZS90b29scy9pZGVfcXVlcnkvcHJvYmVyX3NjcmlwdHMvY3BwL2lkZV9xdWVyeV9wcm9iZXJzY3JpcHRfY2MvYW5kcm9pZF9hcm1fYXJtdjctYS1uZW9uL2dlbi9wcm90bxoULURfX0xJQkNfQVBJX189MTAwMDAaFC1EX19MSUJNX0FQSV9fPTEwMDAwGhUtRF9fTElCRExfQVBJX189MTAwMDAaFy1JZXh0ZXJuYWwvcHJvdG9idWYvc3JjGlktSXByZWJ1aWx0cy9jbGFuZy9ob3N0L2xpbnV4LXg4Ni9jbGFuZy1yNTIyODE3L2FuZHJvaWRfbGliYysrL3BsYXRmb3JtL2FybS9pbmNsdWRlL2MrKy92MRo9LUlwcmVidWlsdHMvY2xhbmcvaG9zdC9saW51eC14ODYvY2xhbmctcjUyMjgxNy9pbmNsdWRlL2MrKy92MRogLUliaW9uaWMvbGliYy9hc3luY19zYWZlL2luY2x1ZGUaHy1Jc3lzdGVtL2xvZ2dpbmcvbGlibG9nL2luY2x1ZGUaJy1JYmlvbmljL2xpYmMvc3lzdGVtX3Byb3BlcnRpZXMvaW5jbHVkZRo8LUlzeXN0ZW0vY29yZS9wcm9wZXJ0eV9zZXJ2aWNlL2xpYnByb3BlcnR5aW5mb3BhcnNlci9pbmNsdWRlGggtaXN5c3RlbRoTYmlvbmljL2xpYmMvaW5jbHVkZRoILWlzeXN0ZW0aH2Jpb25pYy9saWJjL2tlcm5lbC91YXBpL2FzbS1hcm0aCC1pc3lzdGVtGhdiaW9uaWMvbGliYy9rZXJuZWwvdWFwaRoILWlzeXN0ZW0aH2Jpb25pYy9saWJjL2tlcm5lbC9hbmRyb2lkL3Njc2kaCC1pc3lzdGVtGh9iaW9uaWMvbGliYy9rZXJuZWwvYW5kcm9pZC91YXBpGgctdGFyZ2V0Gh1hcm12N2EtbGludXgtYW5kcm9pZGVhYmkxMDAwMBoQLURBTkRST0lEX1NUUklDVBoFLWZQSUUaBy1XZXJyb3IaFS1Xbm8tdW51c2VkLXBhcmFtZXRlchoZLURHT09HTEVfUFJPVE9CVUZfTk9fUlRUSRoWLVdpbXBsaWNpdC1mYWxsdGhyb3VnaBoqLURfTElCQ1BQX0VOQUJMRV9USFJFQURfU0FGRVRZX0FOTk9UQVRJT05TGhUtV25vLWdudS1pbmNsdWRlLW5leHQaGy1mdmlzaWJpbGl0eS1pbmxpbmVzLWhpZGRlbhoGLW1sbHZtGhktZW5hYmxlLXNocmluay13cmFwPWZhbHNlGgwtc3RkPWdudSsrMjAaCS1mbm8tcnR0aRoVLUlzeXN0ZW0vY29yZS9pbmNsdWRlGh8tSXN5c3RlbS9sb2dnaW5nL2xpYmxvZy9pbmNsdWRlGhwtSXN5c3RlbS9tZWRpYS9hdWRpby9pbmNsdWRlGh4tSWhhcmR3YXJlL2xpYmhhcmR3YXJlL2luY2x1ZGUaJS1JaGFyZHdhcmUvbGliaGFyZHdhcmVfbGVnYWN5L2luY2x1ZGUaFi1JaGFyZHdhcmUvcmlsL2luY2x1ZGUaGy1JZnJhbWV3b3Jrcy9uYXRpdmUvaW5jbHVkZRoiLUlmcmFtZXdvcmtzL25hdGl2ZS9vcGVuZ2wvaW5jbHVkZRoXLUlmcmFtZXdvcmtzL2F2L2luY2x1ZGUaFi1XZXJyb3I9Ym9vbC1vcGVyYXRpb24aIC1XZXJyb3I9Zm9ybWF0LWluc3VmZmljaWVudC1hcmdzGiUtV2Vycm9yPWltcGxpY2l0LWludC1mbG9hdC1jb252ZXJzaW9uGhstV2Vycm9yPWludC1pbi1ib29sLWNvbnRleHQaGy1XZXJyb3I9aW50LXRvLXBvaW50ZXItY2FzdBobLVdlcnJvcj1wb2ludGVyLXRvLWludC1jYXN0GhctV2Vycm9yPXhvci11c2VkLWFzLXBvdxoeLVduby12b2lkLXBvaW50ZXItdG8tZW51bS1jYXN0Gh0tV25vLXZvaWQtcG9pbnRlci10by1pbnQtY2FzdBoYLVduby1wb2ludGVyLXRvLWludC1jYXN0GhYtV2Vycm9yPWZvcnRpZnktc291cmNlGhQtV25vLXVudXNlZC12YXJpYWJsZRofLVduby1taXNzaW5nLWZpZWxkLWluaXRpYWxpemVycxoTLVduby1wYWNrZWQtbm9uLXBvZBocLVdlcnJvcj1hZGRyZXNzLW9mLXRlbXBvcmFyeRorLVdlcnJvcj1pbmNvbXBhdGlibGUtZnVuY3Rpb24tcG9pbnRlci10eXBlcxoYLVdlcnJvcj1udWxsLWRlcmVmZXJlbmNlGhMtV2Vycm9yPXJldHVybi10eXBlGiItV25vLXRhdXRvbG9naWNhbC1jb25zdGFudC1jb21wYXJlGiQtV25vLXRhdXRvbG9naWNhbC10eXBlLWxpbWl0LWNvbXBhcmUaIi1Xbm8taW1wbGljaXQtaW50LWZsb2F0LWNvbnZlcnNpb24aIS1Xbm8tdGF1dG9sb2dpY2FsLW92ZXJsYXAtY29tcGFyZRoULVduby1kZXByZWNhdGVkLWNvcHkaGS1Xbm8tcmFuZ2UtbG9vcC1jb25zdHJ1Y3QaIi1Xbm8temVyby1hcy1udWxsLXBvaW50ZXItY29uc3RhbnQaKS1Xbm8tZGVwcmVjYXRlZC1hbm9uLWVudW0tZW51bS1jb252ZXJzaW9uGiQtV25vLWRlcHJlY2F0ZWQtZW51bS1lbnVtLWNvbnZlcnNpb24aFS1Xbm8tcGVzc2ltaXppbmctbW92ZRoeLVduby1ub24tYy10eXBlZGVmLWZvci1saW5rYWdlGhMtV25vLWFsaWduLW1pc21hdGNoGiItV25vLWVycm9yPXVudXNlZC1idXQtc2V0LXZhcmlhYmxlGiMtV25vLWVycm9yPXVudXNlZC1idXQtc2V0LXBhcmFtZXRlchoeLVduby1lcnJvcj1kZXByZWNhdGVkLWJ1aWx0aW5zGhUtV25vLWVycm9yPWRlcHJlY2F0ZWQaMi1Xbm8tZXJyb3I9c2luZ2xlLWJpdC1iaXRmaWVsZC1jb25zdGFudC1jb252ZXJzaW9uGiQtV25vLWVycm9yPWVudW0tY29uc3RleHByLWNvbnZlcnNpb24aGy1Xbm8tZXJyb3I9aW52YWxpZC1vZmZzZXRvZhomLVduby1kZXByZWNhdGVkLWR5bmFtaWMtZXhjZXB0aW9uLXNwZWMaOGJ1aWxkL21ha2UvdG9vbHMvaWRlX3F1ZXJ5L3Byb2Jlcl9zY3JpcHRzL2NwcC9nZW5lcmFsLmNjItU/Ciu2AXNvb25nLy5pbnRlcm1lZGlhdGVzL2J1aWxkL21ha2UvdG9vbHMvaWRlX3F1ZXJ5L3Byb2Jlcl9zY3JpcHRzL2NwcC9pZGVfcXVlcnlfcHJvYmVyc2NyaXB0X2NjL2FuZHJvaWRfYXJtX2FybXY3LWEtbmVvbi9nZW4vcHJvdG8vYnVpbGQvbWFrZS90b29scy9pZGVfcXVlcnkvcHJvYmVyX3NjcmlwdHMvY3BwL2Zvby5wYi5oEpk+Ly8gR2VuZXJhdGVkIGJ5IHRoZSBwcm90b2NvbCBidWZmZXIgY29tcGlsZXIuICBETyBOT1QgRURJVCEKKy8vIHNvdXJjZTogYnVpbGQvbWFrZS90b29scy9pZGVfcXVlcnkvcHJvYmVyX3NjcmlwdHMvY3BwL2Zvby5wcm90bworCisjaWZuZGVmIEdPT0dMRV9QUk9UT0JVRl9JTkNMVURFRF9idWlsZF8yZm1ha2VfMmZ0b29sc18yZmlkZV81ZnF1ZXJ5XzJmcHJvYmVyXzVmc2NyaXB0c18yZmNwcF8yZmZvb18yZXByb3RvCisjZGVmaW5lIEdPT0dMRV9QUk9UT0JVRl9JTkNMVURFRF9idWlsZF8yZm1ha2VfMmZ0b29sc18yZmlkZV81ZnF1ZXJ5XzJmcHJvYmVyXzVmc2NyaXB0c18yZmNwcF8yZmZvb18yZXByb3RvCisKKyNpbmNsdWRlIDxjc3RkaW50PgorI2luY2x1ZGUgPGxpbWl0cz4KKyNpbmNsdWRlIDxzdHJpbmc+CisKKyNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvcG9ydF9kZWYuaW5jPgorI2lmIFBST1RPQlVGX1ZFUlNJT04gPCAzMDIxMDAwCisjZXJyb3IgVGhpcyBmaWxlIHdhcyBnZW5lcmF0ZWQgYnkgYSBuZXdlciB2ZXJzaW9uIG9mIHByb3RvYyB3aGljaCBpcworI2Vycm9yIGluY29tcGF0aWJsZSB3aXRoIHlvdXIgUHJvdG9jb2wgQnVmZmVyIGhlYWRlcnMuIFBsZWFzZSB1cGRhdGUKKyNlcnJvciB5b3VyIGhlYWRlcnMuCisjZW5kaWYKKyNpZiAzMDIxMDEyIDwgUFJPVE9CVUZfTUlOX1BST1RPQ19WRVJTSU9OCisjZXJyb3IgVGhpcyBmaWxlIHdhcyBnZW5lcmF0ZWQgYnkgYW4gb2xkZXIgdmVyc2lvbiBvZiBwcm90b2Mgd2hpY2ggaXMKKyNlcnJvciBpbmNvbXBhdGlibGUgd2l0aCB5b3VyIFByb3RvY29sIEJ1ZmZlciBoZWFkZXJzLiBQbGVhc2UKKyNlcnJvciByZWdlbmVyYXRlIHRoaXMgZmlsZSB3aXRoIGEgbmV3ZXIgdmVyc2lvbiBvZiBwcm90b2MuCisjZW5kaWYKKworI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9wb3J0X3VuZGVmLmluYz4KKyNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvaW8vY29kZWRfc3RyZWFtLmg+CisjaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2FyZW5hLmg+CisjaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2FyZW5hc3RyaW5nLmg+CisjaW5jbHVkZSA8Z29vZ2xlL3Byb3RvYnVmL2dlbmVyYXRlZF9tZXNzYWdlX3V0aWwuaD4KKyNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvbWV0YWRhdGFfbGl0ZS5oPgorI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9tZXNzYWdlX2xpdGUuaD4KKyNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvcmVwZWF0ZWRfZmllbGQuaD4gIC8vIElXWVUgcHJhZ21hOiBleHBvcnQKKyNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvZXh0ZW5zaW9uX3NldC5oPiAgLy8gSVdZVSBwcmFnbWE6IGV4cG9ydAorLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGluY2x1ZGVzKQorI2luY2x1ZGUgPGdvb2dsZS9wcm90b2J1Zi9wb3J0X2RlZi5pbmM+CisjZGVmaW5lIFBST1RPQlVGX0lOVEVSTkFMX0VYUE9SVF9idWlsZF8yZm1ha2VfMmZ0b29sc18yZmlkZV81ZnF1ZXJ5XzJmcHJvYmVyXzVmc2NyaXB0c18yZmNwcF8yZmZvb18yZXByb3RvCitQUk9UT0JVRl9OQU1FU1BBQ0VfT1BFTgorbmFtZXNwYWNlIGludGVybmFsIHsKK2NsYXNzIEFueU1ldGFkYXRhOworfSAgLy8gbmFtZXNwYWNlIGludGVybmFsCitQUk9UT0JVRl9OQU1FU1BBQ0VfQ0xPU0UKKworLy8gSW50ZXJuYWwgaW1wbGVtZW50YXRpb24gZGV0YWlsIC0tIGRvIG5vdCB1c2UgdGhlc2UgbWVtYmVycy4KK3N0cnVjdCBUYWJsZVN0cnVjdF9idWlsZF8yZm1ha2VfMmZ0b29sc18yZmlkZV81ZnF1ZXJ5XzJmcHJvYmVyXzVmc2NyaXB0c18yZmNwcF8yZmZvb18yZXByb3RvIHsKKyAgc3RhdGljIGNvbnN0IDo6dWludDMyX3Qgb2Zmc2V0c1tdOworfTsKK25hbWVzcGFjZSBpZGVfcXVlcnkgeworbmFtZXNwYWNlIHByb2Jlcl9zY3JpcHRzIHsKK2NsYXNzIFByb3RvTXNnOworc3RydWN0IFByb3RvTXNnRGVmYXVsdFR5cGVJbnRlcm5hbDsKK2V4dGVybiBQcm90b01zZ0RlZmF1bHRUeXBlSW50ZXJuYWwgX1Byb3RvTXNnX2RlZmF1bHRfaW5zdGFuY2VfOworfSAgLy8gbmFtZXNwYWNlIHByb2Jlcl9zY3JpcHRzCit9ICAvLyBuYW1lc3BhY2UgaWRlX3F1ZXJ5CitQUk9UT0JVRl9OQU1FU1BBQ0VfT1BFTgordGVtcGxhdGU8PiA6OmlkZV9xdWVyeTo6cHJvYmVyX3NjcmlwdHM6OlByb3RvTXNnKiBBcmVuYTo6Q3JlYXRlTWF5YmVNZXNzYWdlPDo6aWRlX3F1ZXJ5Ojpwcm9iZXJfc2NyaXB0czo6UHJvdG9Nc2c+KEFyZW5hKik7CitQUk9UT0JVRl9OQU1FU1BBQ0VfQ0xPU0UKK25hbWVzcGFjZSBpZGVfcXVlcnkgeworbmFtZXNwYWNlIHByb2Jlcl9zY3JpcHRzIHsKKworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitjbGFzcyBQcm90b01zZyBmaW5hbCA6CisgICAgcHVibGljIDo6UFJPVE9CVUZfTkFNRVNQQUNFX0lEOjpNZXNzYWdlTGl0ZSAvKiBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoY2xhc3NfZGVmaW5pdGlvbjppZGVfcXVlcnkucHJvYmVyX3NjcmlwdHMuUHJvdG9Nc2cpICovIHsKKyBwdWJsaWM6CisgIGlubGluZSBQcm90b01zZygpIDogUHJvdG9Nc2cobnVsbHB0cikge30KKyAgflByb3RvTXNnKCkgb3ZlcnJpZGU7CisgIGV4cGxpY2l0IFBST1RPQlVGX0NPTlNURVhQUiBQcm90b01zZyg6OlBST1RPQlVGX05BTUVTUEFDRV9JRDo6aW50ZXJuYWw6OkNvbnN0YW50SW5pdGlhbGl6ZWQpOworCisgIFByb3RvTXNnKGNvbnN0IFByb3RvTXNnJiBmcm9tKTsKKyAgUHJvdG9Nc2coUHJvdG9Nc2cmJiBmcm9tKSBub2V4Y2VwdAorICAgIDogUHJvdG9Nc2coKSB7CisgICAgKnRoaXMgPSA6OnN0ZDo6bW92ZShmcm9tKTsKKyAgfQorCisgIGlubGluZSBQcm90b01zZyYgb3BlcmF0b3I9KGNvbnN0IFByb3RvTXNnJiBmcm9tKSB7CisgICAgaWYgKHRoaXMgPT0gJmZyb20pIHJldHVybiAqdGhpczsKKyAgICBDb3B5RnJvbShmcm9tKTsKKyAgICByZXR1cm4gKnRoaXM7CisgIH0KKyAgaW5saW5lIFByb3RvTXNnJiBvcGVyYXRvcj0oUHJvdG9Nc2cmJiBmcm9tKSBub2V4Y2VwdCB7CisgICAgaWYgKHRoaXMgPT0gJmZyb20pIHJldHVybiAqdGhpczsKKyAgICBpZiAoR2V0T3duaW5nQXJlbmEoKSA9PSBmcm9tLkdldE93bmluZ0FyZW5hKCkKKyAgI2lmZGVmIFBST1RPQlVGX0ZPUkNFX0NPUFlfSU5fTU9WRQorICAgICAgICAmJiBHZXRPd25pbmdBcmVuYSgpICE9IG51bGxwdHIKKyAgI2VuZGlmICAvLyAhUFJPVE9CVUZfRk9SQ0VfQ09QWV9JTl9NT1ZFCisgICAgKSB7CisgICAgICBJbnRlcm5hbFN3YXAoJmZyb20pOworICAgIH0gZWxzZSB7CisgICAgICBDb3B5RnJvbShmcm9tKTsKKyAgICB9CisgICAgcmV0dXJuICp0aGlzOworICB9CisKKyAgc3RhdGljIGNvbnN0IFByb3RvTXNnJiBkZWZhdWx0X2luc3RhbmNlKCkgeworICAgIHJldHVybiAqaW50ZXJuYWxfZGVmYXVsdF9pbnN0YW5jZSgpOworICB9CisgIHN0YXRpYyBpbmxpbmUgY29uc3QgUHJvdG9Nc2cqIGludGVybmFsX2RlZmF1bHRfaW5zdGFuY2UoKSB7CisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgUHJvdG9Nc2cqPigKKyAgICAgICAgICAgICAgICZfUHJvdG9Nc2dfZGVmYXVsdF9pbnN0YW5jZV8pOworICB9CisgIHN0YXRpYyBjb25zdGV4cHIgaW50IGtJbmRleEluRmlsZU1lc3NhZ2VzID0KKyAgICAwOworCisgIGZyaWVuZCB2b2lkIHN3YXAoUHJvdG9Nc2cmIGEsIFByb3RvTXNnJiBiKSB7CisgICAgYS5Td2FwKCZiKTsKKyAgfQorICBpbmxpbmUgdm9pZCBTd2FwKFByb3RvTXNnKiBvdGhlcikgeworICAgIGlmIChvdGhlciA9PSB0aGlzKSByZXR1cm47CisgICNpZmRlZiBQUk9UT0JVRl9GT1JDRV9DT1BZX0lOX1NXQVAKKyAgICBpZiAoR2V0T3duaW5nQXJlbmEoKSAhPSBudWxscHRyICYmCisgICAgICAgIEdldE93bmluZ0FyZW5hKCkgPT0gb3RoZXItPkdldE93bmluZ0FyZW5hKCkpIHsKKyAgICNlbHNlICAvLyBQUk9UT0JVRl9GT1JDRV9DT1BZX0lOX1NXQVAKKyAgICBpZiAoR2V0T3duaW5nQXJlbmEoKSA9PSBvdGhlci0+R2V0T3duaW5nQXJlbmEoKSkgeworICAjZW5kaWYgIC8vICFQUk9UT0JVRl9GT1JDRV9DT1BZX0lOX1NXQVAKKyAgICAgIEludGVybmFsU3dhcChvdGhlcik7CisgICAgfSBlbHNlIHsKKyAgICAgIDo6UFJPVE9CVUZfTkFNRVNQQUNFX0lEOjppbnRlcm5hbDo6R2VuZXJpY1N3YXAodGhpcywgb3RoZXIpOworICAgIH0KKyAgfQorICB2b2lkIFVuc2FmZUFyZW5hU3dhcChQcm90b01zZyogb3RoZXIpIHsKKyAgICBpZiAob3RoZXIgPT0gdGhpcykgcmV0dXJuOworICAgIEdPT0dMRV9EQ0hFQ0soR2V0T3duaW5nQXJlbmEoKSA9PSBvdGhlci0+R2V0T3duaW5nQXJlbmEoKSk7CisgICAgSW50ZXJuYWxTd2FwKG90aGVyKTsKKyAgfQorCisgIC8vIGltcGxlbWVudHMgTWVzc2FnZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgUHJvdG9Nc2cqIE5ldyg6OlBST1RPQlVGX05BTUVTUEFDRV9JRDo6QXJlbmEqIGFyZW5hKSBjb25zdCBmaW5hbCB7CisgICAgcmV0dXJuIENyZWF0ZU1heWJlTWVzc2FnZTxQcm90b01zZz4oYXJlbmEpOworICB9CisgIFByb3RvTXNnKiBOZXcoKSBjb25zdCB7CisgICAgcmV0dXJuIE5ldyhudWxscHRyKTsKKyAgfQorICB2b2lkIENoZWNrVHlwZUFuZE1lcmdlRnJvbShjb25zdCA6OlBST1RPQlVGX05BTUVTUEFDRV9JRDo6TWVzc2FnZUxpdGUmIGZyb20pICBmaW5hbDsKKyAgdm9pZCBDb3B5RnJvbShjb25zdCBQcm90b01zZyYgZnJvbSk7CisgIHZvaWQgTWVyZ2VGcm9tKGNvbnN0IFByb3RvTXNnJiBmcm9tKTsKKyAgUFJPVE9CVUZfQVRUUklCVVRFX1JFSU5JVElBTElaRVMgdm9pZCBDbGVhcigpIGZpbmFsOworICBib29sIElzSW5pdGlhbGl6ZWQoKSBjb25zdCBmaW5hbDsKKworICBzaXplX3QgQnl0ZVNpemVMb25nKCkgY29uc3QgZmluYWw7CisgIGNvbnN0IGNoYXIqIF9JbnRlcm5hbFBhcnNlKGNvbnN0IGNoYXIqIHB0ciwgOjpQUk9UT0JVRl9OQU1FU1BBQ0VfSUQ6OmludGVybmFsOjpQYXJzZUNvbnRleHQqIGN0eCkgZmluYWw7CisgIDo6dWludDhfdCogX0ludGVybmFsU2VyaWFsaXplKAorICAgICAgOjp1aW50OF90KiB0YXJnZXQsIDo6UFJPVE9CVUZfTkFNRVNQQUNFX0lEOjppbzo6RXBzQ29weU91dHB1dFN0cmVhbSogc3RyZWFtKSBjb25zdCBmaW5hbDsKKyAgaW50IEdldENhY2hlZFNpemUoKSBjb25zdCBmaW5hbCB7IHJldHVybiBfaW1wbF8uX2NhY2hlZF9zaXplXy5HZXQoKTsgfQorCisgIHByaXZhdGU6CisgIHZvaWQgU2hhcmVkQ3Rvcig6OlBST1RPQlVGX05BTUVTUEFDRV9JRDo6QXJlbmEqIGFyZW5hLCBib29sIGlzX21lc3NhZ2Vfb3duZWQpOworICB2b2lkIFNoYXJlZER0b3IoKTsKKyAgdm9pZCBTZXRDYWNoZWRTaXplKGludCBzaXplKSBjb25zdDsKKyAgdm9pZCBJbnRlcm5hbFN3YXAoUHJvdG9Nc2cqIG90aGVyKTsKKworICBwcml2YXRlOgorICBmcmllbmQgY2xhc3MgOjpQUk9UT0JVRl9OQU1FU1BBQ0VfSUQ6OmludGVybmFsOjpBbnlNZXRhZGF0YTsKKyAgc3RhdGljIDo6UFJPVE9CVUZfTkFNRVNQQUNFX0lEOjpTdHJpbmdQaWVjZSBGdWxsTWVzc2FnZU5hbWUoKSB7CisgICAgcmV0dXJuICJpZGVfcXVlcnkucHJvYmVyX3NjcmlwdHMuUHJvdG9Nc2ciOworICB9CisgIHByb3RlY3RlZDoKKyAgZXhwbGljaXQgUHJvdG9Nc2coOjpQUk9UT0JVRl9OQU1FU1BBQ0VfSUQ6OkFyZW5hKiBhcmVuYSwKKyAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBpc19tZXNzYWdlX293bmVkID0gZmFsc2UpOworICBwdWJsaWM6CisKKyAgc3RkOjpzdHJpbmcgR2V0VHlwZU5hbWUoKSBjb25zdCBmaW5hbDsKKworICAvLyBuZXN0ZWQgdHlwZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgIC8vIGFjY2Vzc29ycyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgZW51bSA6IGludCB7CisgICAga1NvbWVGaWVsZEZpZWxkTnVtYmVyID0gMSwKKyAgfTsKKyAgLy8gaW50NjQgc29tZV9maWVsZCA9IDE7CisgIHZvaWQgY2xlYXJfc29tZV9maWVsZCgpOworICA6OmludDY0X3Qgc29tZV9maWVsZCgpIGNvbnN0OworICB2b2lkIHNldF9zb21lX2ZpZWxkKDo6aW50NjRfdCB2YWx1ZSk7CisgIHByaXZhdGU6CisgIDo6aW50NjRfdCBfaW50ZXJuYWxfc29tZV9maWVsZCgpIGNvbnN0OworICB2b2lkIF9pbnRlcm5hbF9zZXRfc29tZV9maWVsZCg6OmludDY0X3QgdmFsdWUpOworICBwdWJsaWM6CisKKyAgLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGNsYXNzX3Njb3BlOmlkZV9xdWVyeS5wcm9iZXJfc2NyaXB0cy5Qcm90b01zZykKKyBwcml2YXRlOgorICBjbGFzcyBfSW50ZXJuYWw7CisKKyAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGZyaWVuZCBjbGFzcyA6OlBST1RPQlVGX05BTUVTUEFDRV9JRDo6QXJlbmE6OkludGVybmFsSGVscGVyOworICB0eXBlZGVmIHZvaWQgSW50ZXJuYWxBcmVuYUNvbnN0cnVjdGFibGVfOworICB0eXBlZGVmIHZvaWQgRGVzdHJ1Y3RvclNraXBwYWJsZV87CisgIHN0cnVjdCBJbXBsXyB7CisgICAgOjppbnQ2NF90IHNvbWVfZmllbGRfOworICAgIG11dGFibGUgOjpQUk9UT0JVRl9OQU1FU1BBQ0VfSUQ6OmludGVybmFsOjpDYWNoZWRTaXplIF9jYWNoZWRfc2l6ZV87CisgIH07CisgIHVuaW9uIHsgSW1wbF8gX2ltcGxfOyB9OworICBmcmllbmQgc3RydWN0IDo6VGFibGVTdHJ1Y3RfYnVpbGRfMmZtYWtlXzJmdG9vbHNfMmZpZGVfNWZxdWVyeV8yZnByb2Jlcl81ZnNjcmlwdHNfMmZjcHBfMmZmb29fMmVwcm90bzsKK307CisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisjaWZkZWYgX19HTlVDX18KKyAgI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBwdXNoCisgICNwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCAiLVdzdHJpY3QtYWxpYXNpbmciCisjZW5kaWYgIC8vIF9fR05VQ19fCisvLyBQcm90b01zZworCisvLyBpbnQ2NCBzb21lX2ZpZWxkID0gMTsKK2lubGluZSB2b2lkIFByb3RvTXNnOjpjbGVhcl9zb21lX2ZpZWxkKCkgeworICBfaW1wbF8uc29tZV9maWVsZF8gPSA6OmludDY0X3R7MH07Cit9CitpbmxpbmUgOjppbnQ2NF90IFByb3RvTXNnOjpfaW50ZXJuYWxfc29tZV9maWVsZCgpIGNvbnN0IHsKKyAgcmV0dXJuIF9pbXBsXy5zb21lX2ZpZWxkXzsKK30KK2lubGluZSA6OmludDY0X3QgUHJvdG9Nc2c6OnNvbWVfZmllbGQoKSBjb25zdCB7CisgIC8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChmaWVsZF9nZXQ6aWRlX3F1ZXJ5LnByb2Jlcl9zY3JpcHRzLlByb3RvTXNnLnNvbWVfZmllbGQpCisgIHJldHVybiBfaW50ZXJuYWxfc29tZV9maWVsZCgpOworfQoraW5saW5lIHZvaWQgUHJvdG9Nc2c6Ol9pbnRlcm5hbF9zZXRfc29tZV9maWVsZCg6OmludDY0X3QgdmFsdWUpIHsKKyAgCisgIF9pbXBsXy5zb21lX2ZpZWxkXyA9IHZhbHVlOworfQoraW5saW5lIHZvaWQgUHJvdG9Nc2c6OnNldF9zb21lX2ZpZWxkKDo6aW50NjRfdCB2YWx1ZSkgeworICBfaW50ZXJuYWxfc2V0X3NvbWVfZmllbGQodmFsdWUpOworICAvLyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoZmllbGRfc2V0OmlkZV9xdWVyeS5wcm9iZXJfc2NyaXB0cy5Qcm90b01zZy5zb21lX2ZpZWxkKQorfQorCisjaWZkZWYgX19HTlVDX18KKyAgI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBwb3AKKyNlbmRpZiAgLy8gX19HTlVDX18KKworLy8gQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KG5hbWVzcGFjZV9zY29wZSkKKworfSAgLy8gbmFtZXNwYWNlIHByb2Jlcl9zY3JpcHRzCit9ICAvLyBuYW1lc3BhY2UgaWRlX3F1ZXJ5CisKKy8vIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChnbG9iYWxfc2NvcGUpCisKKyNpbmNsdWRlIDxnb29nbGUvcHJvdG9idWYvcG9ydF91bmRlZi5pbmM+CisjZW5kaWYgIC8vIEdPT0dMRV9QUk9UT0JVRl9JTkNMVURFRF9HT09HTEVfUFJPVE9CVUZfSU5DTFVERURfYnVpbGRfMmZtYWtlXzJmdG9vbHNfMmZpZGVfNWZxdWVyeV8yZnByb2Jlcl81ZnNjcmlwdHNfMmZjcHBfMmZmb29fMmVwcm90bwpkaWZmIC0tZ2l0IGEvdG9vbHMvaWRlX3F1ZXJ5L3Byb2Jlcl9zY3JpcHRzL3JlZ2VuLnNoIGIvdG9vbHMvaWRlX3F1ZXJ5L3Byb2Jlcl9zY3JpcHRzL3JlZ2VuLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjJlZGZlNTMKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9pZGVfcXVlcnkvcHJvYmVyX3NjcmlwdHMvcmVnZW4uc2gKQEAgLTAsMCArMSwzMyBAQAorIyEvYmluL2Jhc2ggLWUKKworIyBDb3B5cmlnaHQgKEMpIDIwMjQgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorIworIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMKKyMgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMKKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworIyBUaGlzIHNjcmlwdCBpcyB1c2VkIHRvIGdlbmVyYXRlIHRoZSBpZGVfcXVlcnkub3V0IGZpbGUuCisjCisjIFRoZSBpZGVfcXVlcnkub3V0IGZpbGUgaXMgYSBwcmUtY29tcHV0ZWQgcmVzdWx0IG9mIHJ1bm5pbmcgaWRlX3F1ZXJ5LnNoCisjIG9uIGEgc2V0IG9mIGZpbGVzLiBUaGlzIGFsbG93cyB0aGUgcHJvYmVyIHRvIHJ1biBpdHMgdGVzdHMgd2l0aG91dCBydW5uaW5nCisjIGlkZV9xdWVyeS5zaC4gVGhlIHByb2JlciBkb2Vzbid0IGNoZWNrLW91dCB0aGUgZnVsbCBzb3VyY2UgY29kZSwgc28gaXQKKyMgY2FuJ3QgcnVuIGlkZV9xdWVyeS5zaCBpdHNlbGYuCisKK2NkICQoZGlybmFtZSAkQkFTSF9TT1VSQ0UpCitzb3VyY2UgJChwd2QpLy4uLy4uLy4uL3NoZWxsX3V0aWxzLnNoCityZXF1aXJlX3RvcAorCitmaWxlc190b19idWlsZD0oCisgIGJ1aWxkL21ha2UvdG9vbHMvaWRlX3F1ZXJ5L3Byb2Jlcl9zY3JpcHRzL2NwcC9nZW5lcmFsLmNjCispCisKK2NkICR7VE9QfQorYnVpbGQvbWFrZS90b29scy9pZGVfcXVlcnkvaWRlX3F1ZXJ5LnNoIC0tbHVuY2hfdGFyZ2V0PWFvc3BfYXJtLXRydW5rX3N0YWdpbmctZW5nICR7ZmlsZXNfdG9fYnVpbGRbQF19ID4gYnVpbGQvbWFrZS90b29scy9pZGVfcXVlcnkvcHJvYmVyX3NjcmlwdHMvaWRlX3F1ZXJ5Lm91dAo=