ZGlmZiAtLWdpdCBhL2phdmFfZ2VuL3ByZS13cml0dGVuL3NyYy9tYWluL2phdmEvb3JnL29wZW5mbG93L3Byb3RvY29sL21hdGNoL01hdGNoLmphdmEgYi9qYXZhX2dlbi9wcmUtd3JpdHRlbi9zcmMvbWFpbi9qYXZhL29yZy9vcGVuZmxvdy9wcm90b2NvbC9tYXRjaC9NYXRjaC5qYXZhCmluZGV4IGZhNDI3MzcuLjk5YjdkZTQgMTAwNjQ0Ci0tLSBhL2phdmFfZ2VuL3ByZS13cml0dGVuL3NyYy9tYWluL2phdmEvb3JnL29wZW5mbG93L3Byb3RvY29sL21hdGNoL01hdGNoLmphdmEKKysrIGIvamF2YV9nZW4vcHJlLXdyaXR0ZW4vc3JjL21haW4vamF2YS9vcmcvb3BlbmZsb3cvcHJvdG9jb2wvbWF0Y2gvTWF0Y2guamF2YQpAQCAtMSwyMCArMSw4OSBAQAogcGFja2FnZSBvcmcub3BlbmZsb3cucHJvdG9jb2wubWF0Y2g7CiAKIGltcG9ydCBvcmcub3BlbmZsb3cucHJvdG9jb2wuT0ZPYmplY3Q7CitpbXBvcnQgb3JnLm9wZW5mbG93LnR5cGVzLk1hc2tlZDsKIGltcG9ydCBvcmcub3BlbmZsb3cudHlwZXMuT0ZWYWx1ZVR5cGU7CiAKIHB1YmxpYyBpbnRlcmZhY2UgTWF0Y2ggZXh0ZW5kcyBPRk9iamVjdCB7Ci0gICAgcHVibGljIDxGIGV4dGVuZHMgT0ZWYWx1ZVR5cGU+IEYgZ2V0KE1hdGNoRmllbGQ8Rj4gbWF0Y2gpOworICAgIAorICAgIC8qCisgICAgICogUHJlY29uZGl0aW9ucworICAgICAqIE9uIHByZWNvbmRpdGlvbnMgKGZyb20gdGhlIE9GMS4xIHNwZWMsIHBhZ2UgMjgsIHRoZSBPRjEuMCBzcGVjIGZhaWxlZCB0byBleHBsaWNpdGx5IAorICAgICAqIHNwZWNpZnkgdGhpcywgYnV0IGl0IGlzIHRoZSBiZWhhdmlvciBvZiBPZjEuMCBzd2l0Y2hlcyk6CisgICAgICogUHJvdG9jb2wtc3BlY2lmaWMgZmllbGRzIHdpdGhpbiBvZnBfbWF0Y2ggd2lsbCBiZSBpZ25vcmVkIHdpdGhpbiBhIHNpbmdsZSB0YWJsZSB3aGVuIAorICAgICAqIHRoZSBjb3JyZXNwb25kaW5nIHByb3RvY29sIGlzIG5vdCBzcGVjaWZpZWQgaW4gdGhlIG1hdGNoLiBUaGUgTVBMUyBtYXRjaCBmaWVsZHMgd2lsbCAKKyAgICAgKiBiZSBpZ25vcmVkIHVubGVzcyB0aGUgRXRoZXJ0eXBlIGlzIHNwZWNpZmllZCBhcyBNUExTLiBMaWtld2lzZSwgdGhlIElQIGhlYWRlciBhbmQgCisgICAgICogdHJhbnNwb3J0IGhlYWRlciBmaWVsZHMgd2lsbCBiZSBpZ25vcmVkIHVubGVzcyB0aGUgRXRoZXJ0eXBlIGlzIHNwZWNpZmllZCBhcyBlaXRoZXIgCisgICAgICogSVB2NCBvciBBUlAuIFRoZSB0cF9zcmMgYW5kIHRwX2RzdCBmaWVsZHMgd2lsbCBiZSBpZ25vcmVkIHVubGVzcyB0aGUgbmV0d29yayBwcm90b2NvbCAKKyAgICAgKiBzcGVjaWZpZWQgaXMgYXMgVENQLCBVRFAgb3IgU0NUUC4gRmllbGRzIHRoYXQgYXJlIGlnbm9yZWQgZG9u1XQgbmVlZCB0byBiZSB3aWxkY2FyZGVkIAorICAgICAqIGFuZCBzaG91bGQgYmUgc2V0IHRvIDAuCisgICAgICovCisgICAgCisgICAgLyoqCisgICAgICogUmV0dXJucyB0aGUgdmFsdWUgZm9yIHRoZSBnaXZlbiBmaWVsZCBmcm9tIHRoaXMgbWF0Y2guCisgICAgICogCisgICAgICogQHBhcmFtIGZpZWxkIE1hdGNoIGZpZWxkIHRvIHJldHJpZXZlCisgICAgICogQHJldHVybiBWYWx1ZSBvZiBtYXRjaCBmaWVsZAorICAgICAqLworICAgIHB1YmxpYyA8RiBleHRlbmRzIE9GVmFsdWVUeXBlPEY+PiBGIGdldChNYXRjaEZpZWxkPEY+IGZpZWxkKSB0aHJvd3MgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb247CiAKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRoZSBtYXNrZWQgdmFsdWUgZm9yIHRoZSBnaXZlbiBmaWVsZCBmcm9tIHRoaXMgbWF0Y2guCisgICAgICogUHJlY29uZGl0aW9uOiBmaWVsZCBpcyBwYXJ0aWFsbHkgd2lsZGNhcmRlZC4KKyAgICAgKiAKKyAgICAgKiBAcGFyYW0gZmllbGQgTWF0Y2ggZmllbGQgdG8gcmV0cmlldmUKKyAgICAgKiBAcmV0dXJuIE1hc2tlZCB2YWx1ZSBvZiBtYXRjaCBmaWVsZCBvciBudWxsIGlmIG5vIG1hc2sKKyAgICAgKi8KKyAgICBwdWJsaWMgPEYgZXh0ZW5kcyBPRlZhbHVlVHlwZTxGPj4gTWFza2VkPEY+IGdldE1hc2tlZChNYXRjaEZpZWxkPEY+IGZpZWxkKSB0aHJvd3MgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb247CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRydWUgaWYgdGhpcyBtYXRjaCBvYmplY3Qgc3VwcG9ydHMgdGhlIGdpdmVuIG1hdGNoIGZpZWxkLgorICAgICAqIAorICAgICAqIEBwYXJhbSBmaWVsZCBNYXRjaCBmaWVsZAorICAgICAqIEByZXR1cm4gCisgICAgICovCiAgICAgcHVibGljIGJvb2xlYW4gc3VwcG9ydHMoTWF0Y2hGaWVsZDw/PiBmaWVsZCk7CiAKKyAgICAvKioKKyAgICAgKiB0cnVlIGlmZiBmaWVsZCBzdXBwb3J0cyBhIGJpdG1hc2sgbWFzayB0aGF0IHdpbGRjYXJkcyBwYXJ0IG9mIHRoZSBmaWVsZCAKKyAgICAgKiAobm90ZTogbm90IGFsbCBwb3NzaWJsZSB2YWx1ZXMgb2YgdGhpcyBiaXRtYXNrIGhhdmUgdG8gYmUgYWNjZXB0YWJsZSkKKyAgICAgKiAKKyAgICAgKiBAcGFyYW0gZmllbGQgTWF0Y2ggZmllbGQKKyAgICAgKiBAcmV0dXJuIAorICAgICAqLwogICAgIHB1YmxpYyBib29sZWFuIHN1cHBvcnRzTWFza2VkKE1hdGNoRmllbGQ8Pz4gZmllbGQpOwogCisgICAgLyoqCisgICAgICogVHJ1ZSBpZmYgdGhpcyBmaWVsZCBpcyBjdXJyZW50bHkgZnVsbHkgc3BlY2lmaWVkIGluIHRoZSBtYXRjaCwgaS5lLiwgdGhlIAorICAgICAqIG1hdGNoIHdpbGwgb25seSBzZWxlY3QgcGFja2V0cyB0aGF0IG1hdGNoIHRoZSBleGFjdCB2YWx1ZSBvZiBnZXRGaWVsZChmaWVsZCkuCisgICAgICogCisgICAgICogQHBhcmFtIGZpZWxkIE1hdGNoIGZpZWxkCisgICAgICogQHJldHVybiAKKyAgICAgKi8KICAgICBwdWJsaWMgYm9vbGVhbiBpc0V4YWN0KE1hdGNoRmllbGQ8Pz4gZmllbGQpOwogCisgICAgLyoqCisgICAgICogVHJ1ZSBpZiB0aGlzIGZpZWxkIGlzIGN1cnJlbnRseSBsb2dpY2FsbHkgdW5zcGVjaWZpZWQgaW4gdGhlIG1hdGNoLCBpLmUsIHRoZSAKKyAgICAgKiB2YWx1ZSByZXR1cm5lZCBieSBnZXRWYWx1ZShmKSBoYXMgbm8gaW1wYWN0IG9uIHdoZXRoZXIgYSBwYWNrZXQgd2lsbCBiZSBzZWxlY3RlZCAKKyAgICAgKiBieSB0aGUgbWF0Y2ggb3Igbm90LgorICAgICAqIAorICAgICAqIEBwYXJhbSBmaWVsZAorICAgICAqIEByZXR1cm4KKyAgICAgKi8KICAgICBwdWJsaWMgYm9vbGVhbiBpc0Z1bGx5V2lsZGNhcmRlZChNYXRjaEZpZWxkPD8+IGZpZWxkKTsKIAorICAgIC8qKgorICAgICAqIFRydWUgaWYgdGhpcyBmaWVsZCBpcyBjdXJyZW50bHkgcGFydGlhbGx5IHNwZWNpZmllZCBpbiB0aGUgbWF0Y2gsIGkuZSwgdGhlIAorICAgICAqIG1hdGNoIHdpbGwgc2VsZWN0IHBhY2tldHMgdGhhdCBtYXRjaCAocC52YWx1ZSAmIGdldE1hc2soZmllbGQpKSA9PSBnZXRWYWx1ZShmaWVsZCkuCisgICAgICogCisgICAgICogQHBhcmFtIGZpZWxkCisgICAgICogQHJldHVybgorICAgICAqLwogICAgIHB1YmxpYyBib29sZWFuIGlzUGFydGlhbGx5TWFza2VkKE1hdGNoRmllbGQ8Pz4gZmllbGQpOwogCisgICAgLyoqCisgICAgICogUmV0dXJucyBhIGJ1aWxkZXIgdG8gYnVpbGQgbmV3IGluc3RhbmNlcyBvZiB0aGlzIHR5cGUgb2YgbWF0Y2ggb2JqZWN0LgorICAgICAqIEByZXR1cm4gTWF0Y2ggYnVpbGRlcgorICAgICAqLwogICAgIHB1YmxpYyBNYXRjaEJ1aWxkZXIgZ2V0QnVpbGRlcigpOwogfQpkaWZmIC0tZ2l0IGEvamF2YV9nZW4vcHJlLXdyaXR0ZW4vc3JjL21haW4vamF2YS9vcmcvb3BlbmZsb3cvcHJvdG9jb2wvbWF0Y2gvTWF0Y2hCdWlsZGVyLmphdmEgYi9qYXZhX2dlbi9wcmUtd3JpdHRlbi9zcmMvbWFpbi9qYXZhL29yZy9vcGVuZmxvdy9wcm90b2NvbC9tYXRjaC9NYXRjaEJ1aWxkZXIuamF2YQppbmRleCAzYzYwMWY4Li40MzcyZTMwIDEwMDY0NAotLS0gYS9qYXZhX2dlbi9wcmUtd3JpdHRlbi9zcmMvbWFpbi9qYXZhL29yZy9vcGVuZmxvdy9wcm90b2NvbC9tYXRjaC9NYXRjaEJ1aWxkZXIuamF2YQorKysgYi9qYXZhX2dlbi9wcmUtd3JpdHRlbi9zcmMvbWFpbi9qYXZhL29yZy9vcGVuZmxvdy9wcm90b2NvbC9tYXRjaC9NYXRjaEJ1aWxkZXIuamF2YQpAQCAtMSwxMSArMSwxNiBAQAogcGFja2FnZSBvcmcub3BlbmZsb3cucHJvdG9jb2wubWF0Y2g7CiAKK2ltcG9ydCBvcmcub3BlbmZsb3cudHlwZXMuTWFza2VkOwogaW1wb3J0IG9yZy5vcGVuZmxvdy50eXBlcy5PRlZhbHVlVHlwZTsKIAogcHVibGljIGludGVyZmFjZSBNYXRjaEJ1aWxkZXIgZXh0ZW5kcyBNYXRjaCB7Ci0gICAgcHVibGljIDxGIGV4dGVuZHMgT0ZWYWx1ZVR5cGU+IE1hdGNoQnVpbGRlciBzZXQoTWF0Y2hGaWVsZDxGPiBtYXRjaCwgRiB2YWx1ZSk7CisgICAgcHVibGljIDxGIGV4dGVuZHMgT0ZWYWx1ZVR5cGU8Rj4+IE1hdGNoQnVpbGRlciBzZXRFeGFjdChNYXRjaEZpZWxkPEY+IGZpZWxkLCBGIHZhbHVlKTsKKyAgICAKKyAgICBwdWJsaWMgPEYgZXh0ZW5kcyBPRlZhbHVlVHlwZTxGPj4gTWF0Y2hCdWlsZGVyIHNldE1hc2tlZChNYXRjaEZpZWxkPEY+IGZpZWxkLCBGIHZhbHVlLCBGIG1hc2spOyAgICAKIAotICAgIC8vcHVibGljIDxNPiB2b2lkIHNldE1hc2tlZChNYXRjaEZpZWxkPD8sIE0+IG1hdGNoLCBNIHZhbHVlKTsKKyAgICBwdWJsaWMgPEYgZXh0ZW5kcyBPRlZhbHVlVHlwZTxGPj4gTWF0Y2hCdWlsZGVyIHNldE1hc2tlZChNYXRjaEZpZWxkPEY+IGZpZWxkLCBNYXNrZWQ8Rj4gdmFsdWVXaXRoTWFzayk7ICAgIAogCisgICAgcHVibGljIDxGIGV4dGVuZHMgT0ZWYWx1ZVR5cGU8Rj4+IE1hdGNoQnVpbGRlciB3aWxkY2FyZChNYXRjaEZpZWxkPEY+IGZpZWxkKTsKKyAgICAKICAgICBwdWJsaWMgTWF0Y2ggZ2V0TWF0Y2goKTsKIH0KZGlmZiAtLWdpdCBhL2phdmFfZ2VuL3ByZS13cml0dGVuL3NyYy9tYWluL2phdmEvb3JnL29wZW5mbG93L3Byb3RvY29sL21hdGNoL01hdGNoQnVpbGRlclZlcjEwLmphdmEgYi9qYXZhX2dlbi9wcmUtd3JpdHRlbi9zcmMvbWFpbi9qYXZhL29yZy9vcGVuZmxvdy9wcm90b2NvbC9tYXRjaC9NYXRjaEJ1aWxkZXJWZXIxMC5qYXZhCmluZGV4IDBmYmU4NGIuLjYyYzc3ZTUgMTAwNjQ0Ci0tLSBhL2phdmFfZ2VuL3ByZS13cml0dGVuL3NyYy9tYWluL2phdmEvb3JnL29wZW5mbG93L3Byb3RvY29sL21hdGNoL01hdGNoQnVpbGRlclZlcjEwLmphdmEKKysrIGIvamF2YV9nZW4vcHJlLXdyaXR0ZW4vc3JjL21haW4vamF2YS9vcmcvb3BlbmZsb3cvcHJvdG9jb2wvbWF0Y2gvTWF0Y2hCdWlsZGVyVmVyMTAuamF2YQpAQCAtNiw2ICs2LDcgQEAKIGltcG9ydCBvcmcub3BlbmZsb3cudHlwZXMuSXBEc2NwOwogaW1wb3J0IG9yZy5vcGVuZmxvdy50eXBlcy5JcFByb3RvY29sOwogaW1wb3J0IG9yZy5vcGVuZmxvdy50eXBlcy5NYWNBZGRyZXNzOworaW1wb3J0IG9yZy5vcGVuZmxvdy50eXBlcy5NYXNrZWQ7CiBpbXBvcnQgb3JnLm9wZW5mbG93LnR5cGVzLk9GUG9ydDsKIGltcG9ydCBvcmcub3BlbmZsb3cudHlwZXMuT0ZWYWx1ZVR5cGU7CiBpbXBvcnQgb3JnLm9wZW5mbG93LnR5cGVzLlUxNjsKQEAgLTIyLDMzICsyMyw2IEBACiAKICAgICAvLyBwdWJsaWMgc3RhdGljIE1hcDxNYXRjaEZpZWxkPD8sPz4sIEJ1aWxkZXJQYXJhbUhhbmRsZXI8Pz4+CiAgICAgLy8gaGFuZGxlck1hcCA9IG5ldyBIYXNoTWFwKCk7Ci0gICAgc3RhdGljIEJ1aWxkZXJQYXJhbUhhbmRsZXI8Pz5bXSBoYW5kbGVycyA9IG5ldyBCdWlsZGVyUGFyYW1IYW5kbGVyPD8+WzJdOwotCi0gICAgc3RhdGljIHsKLSAgICAgICAgaGFuZGxlcnNbTWF0Y2hGaWVsZC5JTl9QT1JULmlkXSA9IG5ldyBCdWlsZGVyUGFyYW1IYW5kbGVyPE9GUG9ydD4oKSB7Ci0gICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgIHB1YmxpYyB2b2lkIHNldChmaW5hbCBNYXRjaEJ1aWxkZXJWZXIxMCBidWlsZGVyLCBmaW5hbCBPRlBvcnQgdmFsdWUpIHsKLSAgICAgICAgICAgICAgICBidWlsZGVyLmlucHV0UG9ydCA9IHZhbHVlOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgIHB1YmxpYyBPRlBvcnQgZ2V0KGZpbmFsIE1hdGNoQnVpbGRlclZlcjEwIGJ1aWxkZXIpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gYnVpbGRlci5pbnB1dFBvcnQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH07Ci0KLSAgICAgICAgaGFuZGxlcnNbTWF0Y2hGaWVsZC5FVEhfU1JDLmlkXSA9IG5ldyBCdWlsZGVyUGFyYW1IYW5kbGVyPE1hY0FkZHJlc3M+KCkgewotICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICBwdWJsaWMgdm9pZCBzZXQoZmluYWwgTWF0Y2hCdWlsZGVyVmVyMTAgYnVpbGRlciwgZmluYWwgTWFjQWRkcmVzcyB2YWx1ZSkgewotICAgICAgICAgICAgICAgIGJ1aWxkZXIuZGF0YUxheWVyU291cmNlID0gdmFsdWU7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgcHVibGljIE1hY0FkZHJlc3MgZ2V0KGZpbmFsIE1hdGNoQnVpbGRlclZlcjEwIGJ1aWxkZXIpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gYnVpbGRlci5kYXRhTGF5ZXJTb3VyY2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH07Ci0gICAgfQogCiAgICAgcHJvdGVjdGVkIGludCB3aWxkY2FyZHM7CiAgICAgcHJvdGVjdGVkIE9GUG9ydCBpbnB1dFBvcnQ7CkBAIC02NiwzMCArNDAsNTkgQEAKIAogICAgIEBTdXBwcmVzc1dhcm5pbmdzKCJ1bmNoZWNrZWQiKQogICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyA8RiBleHRlbmRzIE9GVmFsdWVUeXBlPiBGIGdldChmaW5hbCBNYXRjaEZpZWxkPEY+IG1hdGNoKSB7CisgICAgcHVibGljIDxGIGV4dGVuZHMgT0ZWYWx1ZVR5cGU8Rj4+IEYgZ2V0KGZpbmFsIE1hdGNoRmllbGQ8Rj4gbWF0Y2gpIHsKICAgICAgICAgc3dpdGNoIChtYXRjaC5pZCkgewotICAgICAgICAgICAgY2FzZSAwOgorICAgICAgICAgICAgY2FzZSBJTl9QT1JUOgogICAgICAgICAgICAgICAgIHJldHVybiAoRikgaW5wdXRQb3J0OwotICAgICAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgY2FzZSBFVEhfU1JDOgogICAgICAgICAgICAgICAgIHJldHVybiAoRikgZGF0YUxheWVyU291cmNlOwogICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgfQogICAgIH0KIAotICAgIEBTdXBwcmVzc1dhcm5pbmdzKCJ1bmNoZWNrZWQiKQogICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyA8RiBleHRlbmRzIE9GVmFsdWVUeXBlPiBNYXRjaEJ1aWxkZXIgc2V0KGZpbmFsIE1hdGNoRmllbGQ8Rj4gbWF0Y2gsIGZpbmFsIEYgdmFsdWUpIHsKKyAgICBwdWJsaWMgPEYgZXh0ZW5kcyBPRlZhbHVlVHlwZTxGPj4gTWFza2VkPEY+CisgICAgICAgICAgICBnZXRNYXNrZWQoTWF0Y2hGaWVsZDxGPiBmaWVsZCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24geworICAgICAgICAvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCisgICAgICAgIHJldHVybiBudWxsOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyA8RiBleHRlbmRzIE9GVmFsdWVUeXBlPEY+PiBNYXRjaEJ1aWxkZXIgc2V0RXhhY3QoZmluYWwgTWF0Y2hGaWVsZDxGPiBtYXRjaCwgZmluYWwgRiB2YWx1ZSkgewogICAgICAgICBzd2l0Y2ggKG1hdGNoLmlkKSB7Ci0gICAgICAgICAgICBjYXNlIDA6CisgICAgICAgICAgICBjYXNlIElOX1BPUlQ6CiAgICAgICAgICAgICAgICAgaW5wdXRQb3J0ID0gKE9GUG9ydCkgdmFsdWU7CiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICBjYXNlIEVUSF9TUkM6CiAgICAgICAgICAgICAgICAgZGF0YUxheWVyU291cmNlID0gKE1hY0FkZHJlc3MpIHZhbHVlOwogICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gdGhpczsKICAgICB9CisgICAgCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIDxGIGV4dGVuZHMgT0ZWYWx1ZVR5cGU8Rj4+IE1hdGNoQnVpbGRlcgorICAgICAgICAgICAgc2V0TWFza2VkKE1hdGNoRmllbGQ8Rj4gZmllbGQsIE1hc2tlZDxGPiB2YWx1ZVdpdGhNYXNrKSB7CisgICAgICAgIC8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIDxGIGV4dGVuZHMgT0ZWYWx1ZVR5cGU8Rj4+IE1hdGNoQnVpbGRlcgorICAgICAgICAgICAgc2V0TWFza2VkKE1hdGNoRmllbGQ8Rj4gZmllbGQsIEYgdmFsdWUsIEYgbWFzaykgeworICAgICAgICAvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCisgICAgICAgIHJldHVybiBudWxsOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyA8RiBleHRlbmRzIE9GVmFsdWVUeXBlPEY+PiBNYXRjaEJ1aWxkZXIgd2lsZGNhcmQoZmluYWwgTWF0Y2hGaWVsZDxGPiBtYXRjaCkgeworICAgICAgICAvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCisgICAgICAgIHJldHVybiBudWxsOworICAgIH0KIAogICAgIHB1YmxpYyBPRlBvcnQgZ2V0SW5wdXRQb3J0KCkgewogICAgICAgICByZXR1cm4gaW5wdXRQb3J0OwpkaWZmIC0tZ2l0IGEvamF2YV9nZW4vcHJlLXdyaXR0ZW4vc3JjL21haW4vamF2YS9vcmcvb3BlbmZsb3cvcHJvdG9jb2wvbWF0Y2gvTWF0Y2hGaWVsZC5qYXZhIGIvamF2YV9nZW4vcHJlLXdyaXR0ZW4vc3JjL21haW4vamF2YS9vcmcvb3BlbmZsb3cvcHJvdG9jb2wvbWF0Y2gvTWF0Y2hGaWVsZC5qYXZhCmluZGV4IGQ5ZDY4ZWMuLjRkNDkzNWMgMTAwNjQ0Ci0tLSBhL2phdmFfZ2VuL3ByZS13cml0dGVuL3NyYy9tYWluL2phdmEvb3JnL29wZW5mbG93L3Byb3RvY29sL21hdGNoL01hdGNoRmllbGQuamF2YQorKysgYi9qYXZhX2dlbi9wcmUtd3JpdHRlbi9zcmMvbWFpbi9qYXZhL29yZy9vcGVuZmxvdy9wcm90b2NvbC9tYXRjaC9NYXRjaEZpZWxkLmphdmEKQEAgLTQsMTA1ICs0LDk5IEBACiBpbXBvcnQgb3JnLm9wZW5mbG93LnR5cGVzLkV0aFR5cGU7CiBpbXBvcnQgb3JnLm9wZW5mbG93LnR5cGVzLklDTVB2NENvZGU7CiBpbXBvcnQgb3JnLm9wZW5mbG93LnR5cGVzLklDTVB2NFR5cGU7Ci1pbXBvcnQgb3JnLm9wZW5mbG93LnR5cGVzLklQdjRXaXRoTWFzazsKK2ltcG9ydCBvcmcub3BlbmZsb3cudHlwZXMuSVB2NDsKK2ltcG9ydCBvcmcub3BlbmZsb3cudHlwZXMuSVB2NjsKIGltcG9ydCBvcmcub3BlbmZsb3cudHlwZXMuSVB2NkZsb3dMYWJlbDsKLWltcG9ydCBvcmcub3BlbmZsb3cudHlwZXMuSVB2NldpdGhNYXNrOwogaW1wb3J0IG9yZy5vcGVuZmxvdy50eXBlcy5JcERzY3A7CiBpbXBvcnQgb3JnLm9wZW5mbG93LnR5cGVzLklwRWNuOwogaW1wb3J0IG9yZy5vcGVuZmxvdy50eXBlcy5JcFByb3RvY29sOwogaW1wb3J0IG9yZy5vcGVuZmxvdy50eXBlcy5NYWNBZGRyZXNzOwotaW1wb3J0IG9yZy5vcGVuZmxvdy50eXBlcy5NYXNrZWQ7CiBpbXBvcnQgb3JnLm9wZW5mbG93LnR5cGVzLk9GUG9ydDsKIGltcG9ydCBvcmcub3BlbmZsb3cudHlwZXMuT0ZWYWx1ZVR5cGU7CiBpbXBvcnQgb3JnLm9wZW5mbG93LnR5cGVzLlRyYW5zcG9ydFBvcnQ7CiBpbXBvcnQgb3JnLm9wZW5mbG93LnR5cGVzLlZsYW5QY3A7CiBpbXBvcnQgb3JnLm9wZW5mbG93LnR5cGVzLlZsYW5WaWQ7CiAKLXB1YmxpYyBjbGFzcyBNYXRjaEZpZWxkPEYgZXh0ZW5kcyBPRlZhbHVlVHlwZT4geworcHVibGljIGNsYXNzIE1hdGNoRmllbGQ8RiBleHRlbmRzIE9GVmFsdWVUeXBlPEY+PiB7CiAgICAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgbmFtZTsKLSAgICBwdWJsaWMgZmluYWwgaW50IGlkOworICAgIHB1YmxpYyBmaW5hbCBNYXRjaEZpZWxkcyBpZDsKIAotICAgIHB1YmxpYyBNYXRjaEZpZWxkKGZpbmFsIFN0cmluZyBuYW1lKSB7Ci0gICAgICAgIHRoaXMubmFtZSA9IG5hbWU7Ci0gICAgICAgIHRoaXMuaWQgPSAtMTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgTWF0Y2hGaWVsZChmaW5hbCBTdHJpbmcgbmFtZSwgZmluYWwgaW50IGlkKSB7CisgICAgcHJpdmF0ZSBNYXRjaEZpZWxkKGZpbmFsIFN0cmluZyBuYW1lLCBmaW5hbCBNYXRjaEZpZWxkcyBpZCkgewogICAgICAgICB0aGlzLm5hbWUgPSBuYW1lOwogICAgICAgICB0aGlzLmlkID0gaWQ7CiAgICAgfQogCiAgICAgcHVibGljIGZpbmFsIHN0YXRpYyBNYXRjaEZpZWxkPE9GUG9ydD4gSU5fUE9SVCA9Ci0gICAgICAgICAgICBuZXcgTWF0Y2hGaWVsZDxPRlBvcnQ+KCJpbl9wb3J0IiwgMCk7CisgICAgICAgICAgICBuZXcgTWF0Y2hGaWVsZDxPRlBvcnQ+KCJpbl9wb3J0IiwgTWF0Y2hGaWVsZHMuSU5fUE9SVCk7CiAgICAgcHVibGljIGZpbmFsIHN0YXRpYyBNYXRjaEZpZWxkPE9GUG9ydD4gSU5fUEhZX1BPUlQgPQotICAgICAgICAgICAgbmV3IE1hdGNoRmllbGQ8T0ZQb3J0PigiaW5fcGh5X3BvcnQiKTsKKyAgICAgICAgICAgIG5ldyBNYXRjaEZpZWxkPE9GUG9ydD4oImluX3BoeV9wb3J0IiwgTWF0Y2hGaWVsZHMuUEhZU0lDQUxfUE9SVCk7CiAgICAgcHVibGljIGZpbmFsIHN0YXRpYyBNYXRjaEZpZWxkPE9GUG9ydD4gTUVUQURBVEEgPQotICAgICAgICAgICAgbmV3IE1hdGNoRmllbGQ8T0ZQb3J0PigibWV0YWRhdGEiKTsKKyAgICAgICAgICAgIG5ldyBNYXRjaEZpZWxkPE9GUG9ydD4oIm1ldGFkYXRhIiwgTWF0Y2hGaWVsZHMuTUVUQURBVEEpOwogCi0gICAgcHVibGljIGZpbmFsIHN0YXRpYyBNYXRjaEZpZWxkPE1hc2tlZDxNYWNBZGRyZXNzPj4gRVRIX0RTVCA9Ci0gICAgICAgICAgICBuZXcgTWF0Y2hGaWVsZDxNYXNrZWQ8TWFjQWRkcmVzcz4+KCJldGhfZHN0Iik7Ci0gICAgcHVibGljIGZpbmFsIHN0YXRpYyBNYXRjaEZpZWxkPE1hc2tlZDxNYWNBZGRyZXNzPj4gRVRIX1NSQyA9Ci0gICAgICAgICAgICBuZXcgTWF0Y2hGaWVsZDxNYXNrZWQ8TWFjQWRkcmVzcz4+KCJldGhfc3JjIiwgMSk7CisgICAgcHVibGljIGZpbmFsIHN0YXRpYyBNYXRjaEZpZWxkPE1hY0FkZHJlc3M+IEVUSF9EU1QgPQorICAgICAgICAgICAgbmV3IE1hdGNoRmllbGQ8TWFjQWRkcmVzcz4oImV0aF9kc3QiLCBNYXRjaEZpZWxkcy5FVEhfRFNUKTsKKyAgICBwdWJsaWMgZmluYWwgc3RhdGljIE1hdGNoRmllbGQ8TWFjQWRkcmVzcz4gRVRIX1NSQyA9CisgICAgICAgICAgICBuZXcgTWF0Y2hGaWVsZDxNYWNBZGRyZXNzPigiZXRoX3NyYyIsIE1hdGNoRmllbGRzLkVUSF9TUkMpOwogCiAgICAgcHVibGljIGZpbmFsIHN0YXRpYyBNYXRjaEZpZWxkPEV0aFR5cGU+IEVUSF9UWVBFID0KLSAgICAgICAgICAgIG5ldyBNYXRjaEZpZWxkPEV0aFR5cGU+KCJldGhfdHlwZSIpOworICAgICAgICAgICAgbmV3IE1hdGNoRmllbGQ8RXRoVHlwZT4oImV0aF90eXBlIiwgTWF0Y2hGaWVsZHMuRVRIX1RZUEUpOwogICAgIAotICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgTWF0Y2hGaWVsZDxNYXNrZWQ8VmxhblZpZD4+IFZMQU5fVklEID0KLSAgICAgICAgICAgIG5ldyBNYXRjaEZpZWxkPE1hc2tlZDxWbGFuVmlkPj4oInZsYW5fdmlkIik7CisgICAgcHVibGljIGZpbmFsIHN0YXRpYyBNYXRjaEZpZWxkPFZsYW5WaWQ+IFZMQU5fVklEID0KKyAgICAgICAgICAgIG5ldyBNYXRjaEZpZWxkPFZsYW5WaWQ+KCJ2bGFuX3ZpZCIsIE1hdGNoRmllbGRzLlZMQU5fVklEKTsKICAgICBwdWJsaWMgZmluYWwgc3RhdGljIE1hdGNoRmllbGQ8VmxhblBjcD4gVkxBTl9QQ1AgPQotICAgICAgICAgICAgbmV3IE1hdGNoRmllbGQ8VmxhblBjcD4oInZsYW5fcGNwIik7CisgICAgICAgICAgICBuZXcgTWF0Y2hGaWVsZDxWbGFuUGNwPigidmxhbl9wY3AiLCBNYXRjaEZpZWxkcy5WTEFOX1BDUCk7CiAgICAgCiAgICAgCiAgICAgcHVibGljIGZpbmFsIHN0YXRpYyBNYXRjaEZpZWxkPElwRHNjcD4gSVBfRFNDUCA9Ci0gICAgICAgICAgICBuZXcgTWF0Y2hGaWVsZDxJcERzY3A+KCJpcF9kc2NwIik7CisgICAgICAgICAgICBuZXcgTWF0Y2hGaWVsZDxJcERzY3A+KCJpcF9kc2NwIiwgTWF0Y2hGaWVsZHMuSVBfRFNDUCk7CiAgICAgcHVibGljIGZpbmFsIHN0YXRpYyBNYXRjaEZpZWxkPElwRWNuPiBJUF9FQ04gPQotICAgICAgICAgICAgbmV3IE1hdGNoRmllbGQ8SXBFY24+KCJpcF9kc2NwIik7CisgICAgICAgICAgICBuZXcgTWF0Y2hGaWVsZDxJcEVjbj4oImlwX2RzY3AiLCBNYXRjaEZpZWxkcy5JUF9FQ04pOwogICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgTWF0Y2hGaWVsZDxJcFByb3RvY29sPiBJUF9QUk9UTyA9Ci0gICAgICAgICAgICBuZXcgTWF0Y2hGaWVsZDxJcFByb3RvY29sPigiaXBfcHJvdG8iKTsKKyAgICAgICAgICAgIG5ldyBNYXRjaEZpZWxkPElwUHJvdG9jb2w+KCJpcF9wcm90byIsIE1hdGNoRmllbGRzLklQX1BST1RPKTsKIAotICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgTWF0Y2hGaWVsZDxJUHY0V2l0aE1hc2s+IElQVjRfU1JDID0KLSAgICAgICAgICAgIG5ldyBNYXRjaEZpZWxkPElQdjRXaXRoTWFzaz4oImlwdjRfc3JjIik7Ci0gICAgcHVibGljIGZpbmFsIHN0YXRpYyBNYXRjaEZpZWxkPElQdjRXaXRoTWFzaz4gSVBWNF9EU1QgPQotICAgICAgICAgICAgbmV3IE1hdGNoRmllbGQ8SVB2NFdpdGhNYXNrPigiaXB2NF9kc3QiKTsKKyAgICBwdWJsaWMgZmluYWwgc3RhdGljIE1hdGNoRmllbGQ8SVB2ND4gSVBWNF9TUkMgPQorICAgICAgICAgICAgbmV3IE1hdGNoRmllbGQ8SVB2ND4oImlwdjRfc3JjIiwgTWF0Y2hGaWVsZHMuSVBWNF9TUkMpOworICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgTWF0Y2hGaWVsZDxJUHY0PiBJUFY0X0RTVCA9CisgICAgICAgICAgICBuZXcgTWF0Y2hGaWVsZDxJUHY0PigiaXB2NF9kc3QiLCBNYXRjaEZpZWxkcy5JUFY0X0RTVCk7CiAKICAgICBwdWJsaWMgZmluYWwgc3RhdGljIE1hdGNoRmllbGQ8VHJhbnNwb3J0UG9ydD4gVENQX1NSQyA9IG5ldyBNYXRjaEZpZWxkPFRyYW5zcG9ydFBvcnQ+KAotICAgICAgICAgICAgInRjcF9zcmMiKTsKKyAgICAgICAgICAgICJ0Y3Bfc3JjIiwgTWF0Y2hGaWVsZHMuVENQX1NSQyk7CiAgICAgcHVibGljIGZpbmFsIHN0YXRpYyBNYXRjaEZpZWxkPFRyYW5zcG9ydFBvcnQ+IFRDUF9EU1QgPSBuZXcgTWF0Y2hGaWVsZDxUcmFuc3BvcnRQb3J0PigKLSAgICAgICAgICAgICJ0Y3BfZHN0Iik7CisgICAgICAgICAgICAidGNwX2RzdCIsIE1hdGNoRmllbGRzLlRDUF9EU1QpOwogCiAgICAgcHVibGljIGZpbmFsIHN0YXRpYyBNYXRjaEZpZWxkPFRyYW5zcG9ydFBvcnQ+IFVEUF9TUkMgPSBuZXcgTWF0Y2hGaWVsZDxUcmFuc3BvcnRQb3J0PigKLSAgICAgICAgICAgICJ1ZHBfc3JjIik7CisgICAgICAgICAgICAidWRwX3NyYyIsIE1hdGNoRmllbGRzLlVEUF9TUkMpOwogICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgTWF0Y2hGaWVsZDxUcmFuc3BvcnRQb3J0PiBVRFBfRFNUID0gbmV3IE1hdGNoRmllbGQ8VHJhbnNwb3J0UG9ydD4oCi0gICAgICAgICAgICAidWRwX2RzdCIpOworICAgICAgICAgICAgInVkcF9kc3QiLCBNYXRjaEZpZWxkcy5VRFBfRFNUKTsKIAogICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgTWF0Y2hGaWVsZDxUcmFuc3BvcnRQb3J0PiBTQ1RQX1NSQyA9IG5ldyBNYXRjaEZpZWxkPFRyYW5zcG9ydFBvcnQ+KAotICAgICAgICAgICAgInNjdHBfc3JjIik7CisgICAgICAgICAgICAic2N0cF9zcmMiLCBNYXRjaEZpZWxkcy5TQ1RQX1NSQyk7CiAgICAgcHVibGljIGZpbmFsIHN0YXRpYyBNYXRjaEZpZWxkPFRyYW5zcG9ydFBvcnQ+IFNDVFBfRFNUID0gbmV3IE1hdGNoRmllbGQ8VHJhbnNwb3J0UG9ydD4oCi0gICAgICAgICAgICAic2N0cF9kc3QiKTsKKyAgICAgICAgICAgICJzY3RwX2RzdCIsIE1hdGNoRmllbGRzLlNDVFBfRFNUKTsKIAogICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgTWF0Y2hGaWVsZDxJQ01QdjRUeXBlPiBJQ01QVjRfVFlQRSA9IG5ldyBNYXRjaEZpZWxkPElDTVB2NFR5cGU+KAotICAgICAgICAgICAgImljbXB2NF9zcmMiKTsKKyAgICAgICAgICAgICJpY21wdjRfc3JjIiwgTWF0Y2hGaWVsZHMuSUNNUFY0X1RZUEUpOwogICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgTWF0Y2hGaWVsZDxJQ01QdjRDb2RlPiBJQ01QVjRfQ09ERSA9IG5ldyBNYXRjaEZpZWxkPElDTVB2NENvZGU+KAotICAgICAgICAgICAgImljbXB2NF9kc3QiKTsKKyAgICAgICAgICAgICJpY21wdjRfZHN0IiwgTWF0Y2hGaWVsZHMuSUNNUFY0X0NPREUpOwogCiAgICAgcHVibGljIGZpbmFsIHN0YXRpYyBNYXRjaEZpZWxkPEFycE9wY29kZT4gQVJQX09QID0gbmV3IE1hdGNoRmllbGQ8QXJwT3Bjb2RlPigKLSAgICAgICAgICAgICJhcnBfb3AiKTsKLSAgICBwdWJsaWMgZmluYWwgc3RhdGljIE1hdGNoRmllbGQ8SVB2NFdpdGhNYXNrPiBBUlBfU1BBID0KLSAgICAgICAgICAgIG5ldyBNYXRjaEZpZWxkPElQdjRXaXRoTWFzaz4oImFycF9zcGEiKTsKLSAgICBwdWJsaWMgZmluYWwgc3RhdGljIE1hdGNoRmllbGQ8SVB2NFdpdGhNYXNrPiBBUlBfVFBBID0KLSAgICAgICAgICAgIG5ldyBNYXRjaEZpZWxkPElQdjRXaXRoTWFzaz4oImFycF90cGEiKTsKLSAgICBwdWJsaWMgZmluYWwgc3RhdGljIE1hdGNoRmllbGQ8TWFza2VkPE1hY0FkZHJlc3M+PiBBUlBfU0hBID0KLSAgICAgICAgICAgIG5ldyBNYXRjaEZpZWxkPE1hc2tlZDxNYWNBZGRyZXNzPj4oImFycF9zaGEiKTsKLSAgICBwdWJsaWMgZmluYWwgc3RhdGljIE1hdGNoRmllbGQ8TWFza2VkPE1hY0FkZHJlc3M+PiBBUlBfVEhBID0KLSAgICAgICAgICAgIG5ldyBNYXRjaEZpZWxkPE1hc2tlZDxNYWNBZGRyZXNzPj4oImFycF90aGEiKTsKKyAgICAgICAgICAgICJhcnBfb3AiLCBNYXRjaEZpZWxkcy5BUlBfT1ApOworICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgTWF0Y2hGaWVsZDxJUHY0PiBBUlBfU1BBID0KKyAgICAgICAgICAgIG5ldyBNYXRjaEZpZWxkPElQdjQ+KCJhcnBfc3BhIiwgTWF0Y2hGaWVsZHMuQVJQX1NQQSk7CisgICAgcHVibGljIGZpbmFsIHN0YXRpYyBNYXRjaEZpZWxkPElQdjQ+IEFSUF9UUEEgPQorICAgICAgICAgICAgbmV3IE1hdGNoRmllbGQ8SVB2ND4oImFycF90cGEiLCBNYXRjaEZpZWxkcy5BUlBfVFBBKTsKKyAgICBwdWJsaWMgZmluYWwgc3RhdGljIE1hdGNoRmllbGQ8TWFjQWRkcmVzcz4gQVJQX1NIQSA9CisgICAgICAgICAgICBuZXcgTWF0Y2hGaWVsZDxNYWNBZGRyZXNzPigiYXJwX3NoYSIsIE1hdGNoRmllbGRzLkFSUF9TSEEpOworICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgTWF0Y2hGaWVsZDxNYWNBZGRyZXNzPiBBUlBfVEhBID0KKyAgICAgICAgICAgIG5ldyBNYXRjaEZpZWxkPE1hY0FkZHJlc3M+KCJhcnBfdGhhIiwgTWF0Y2hGaWVsZHMuQVJQX1RIQSk7CiAKLSAgICBwdWJsaWMgZmluYWwgc3RhdGljIE1hdGNoRmllbGQ8SVB2NldpdGhNYXNrPiBJUFY2X1NSQyA9Ci0gICAgICAgICAgICBuZXcgTWF0Y2hGaWVsZDxJUHY2V2l0aE1hc2s+KCJpcHY2X3NyYyIpOwotICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgTWF0Y2hGaWVsZDxJUHY2V2l0aE1hc2s+IElQVjZfRFNUID0KLSAgICAgICAgICAgIG5ldyBNYXRjaEZpZWxkPElQdjZXaXRoTWFzaz4oImlwdjZfZHN0Iik7CisgICAgcHVibGljIGZpbmFsIHN0YXRpYyBNYXRjaEZpZWxkPElQdjY+IElQVjZfU1JDID0KKyAgICAgICAgICAgIG5ldyBNYXRjaEZpZWxkPElQdjY+KCJpcHY2X3NyYyIsIE1hdGNoRmllbGRzLklQVjZfU1JDKTsKKyAgICBwdWJsaWMgZmluYWwgc3RhdGljIE1hdGNoRmllbGQ8SVB2Nj4gSVBWNl9EU1QgPQorICAgICAgICAgICAgbmV3IE1hdGNoRmllbGQ8SVB2Nj4oImlwdjZfZHN0IiwgTWF0Y2hGaWVsZHMuSVBWNl9EU1QpOwogCi0gICAgcHVibGljIGZpbmFsIHN0YXRpYyBNYXRjaEZpZWxkPE1hc2tlZDxJUHY2Rmxvd0xhYmVsPj4gSVBWNl9GTEFCRUwgPQotICAgICAgICAgICAgbmV3IE1hdGNoRmllbGQ8TWFza2VkPElQdjZGbG93TGFiZWw+PigiaXB2Nl9mbGFiZWwiKTsKKyAgICBwdWJsaWMgZmluYWwgc3RhdGljIE1hdGNoRmllbGQ8SVB2NkZsb3dMYWJlbD4gSVBWNl9GTEFCRUwgPQorICAgICAgICAgICAgbmV3IE1hdGNoRmllbGQ8SVB2NkZsb3dMYWJlbD4oImlwdjZfZmxhYmVsIiwgTWF0Y2hGaWVsZHMuSVBWNl9GTE9XTEFCRUwpOwogCiAgICAgcHVibGljIFN0cmluZyBnZXROYW1lKCkgewogICAgICAgICByZXR1cm4gbmFtZTsKZGlmZiAtLWdpdCBhL2phdmFfZ2VuL3ByZS13cml0dGVuL3NyYy9tYWluL2phdmEvb3JnL29wZW5mbG93L3Byb3RvY29sL21hdGNoL01hdGNoRmllbGRzLmphdmEgYi9qYXZhX2dlbi9wcmUtd3JpdHRlbi9zcmMvbWFpbi9qYXZhL29yZy9vcGVuZmxvdy9wcm90b2NvbC9tYXRjaC9NYXRjaEZpZWxkcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxMDQzZjIKLS0tIC9kZXYvbnVsbAorKysgYi9qYXZhX2dlbi9wcmUtd3JpdHRlbi9zcmMvbWFpbi9qYXZhL29yZy9vcGVuZmxvdy9wcm90b2NvbC9tYXRjaC9NYXRjaEZpZWxkcy5qYXZhCkBAIC0wLDAgKzEsMzMgQEAKK3BhY2thZ2Ugb3JnLm9wZW5mbG93LnByb3RvY29sLm1hdGNoOworCitwdWJsaWMgZW51bSBNYXRjaEZpZWxkcyB7CisgICAgSU5fUE9SVCwKKyAgICBQSFlTSUNBTF9QT1JULAorICAgIE1FVEFEQVRBLAorICAgIEVUSF9EU1QsCisgICAgRVRIX1NSQywKKyAgICBFVEhfVFlQRSwKKyAgICBWTEFOX1ZJRCwKKyAgICBWTEFOX1BDUCwKKyAgICBJUF9EU0NQLAorICAgIElQX0VDTiwKKyAgICBJUF9QUk9UTywKKyAgICBJUFY0X1NSQywKKyAgICBJUFY0X0RTVCwKKyAgICBUQ1BfU1JDLAorICAgIFRDUF9EU1QsCisgICAgVURQX1NSQywKKyAgICBVRFBfRFNULAorICAgIFNDVFBfU1JDLAorICAgIFNDVFBfRFNULAorICAgIElDTVBWNF9UWVBFLAorICAgIElDTVBWNF9DT0RFLAorICAgIEFSUF9PUCwKKyAgICBBUlBfU1BBLAorICAgIEFSUF9UUEEsCisgICAgQVJQX1NIQSwKKyAgICBBUlBfVEhBLAorICAgIElQVjZfU1JDLAorICAgIElQVjZfRFNULAorICAgIElQVjZfRkxPV0xBQkVMLAorfQpkaWZmIC0tZ2l0IGEvamF2YV9nZW4vcHJlLXdyaXR0ZW4vc3JjL21haW4vamF2YS9vcmcvb3BlbmZsb3cvdHlwZXMvQXJwT3Bjb2RlLmphdmEgYi9qYXZhX2dlbi9wcmUtd3JpdHRlbi9zcmMvbWFpbi9qYXZhL29yZy9vcGVuZmxvdy90eXBlcy9BcnBPcGNvZGUuamF2YQppbmRleCA4NTJhYTIwLi42ZWJmNDQ3IDEwMDY0NAotLS0gYS9qYXZhX2dlbi9wcmUtd3JpdHRlbi9zcmMvbWFpbi9qYXZhL29yZy9vcGVuZmxvdy90eXBlcy9BcnBPcGNvZGUuamF2YQorKysgYi9qYXZhX2dlbi9wcmUtd3JpdHRlbi9zcmMvbWFpbi9qYXZhL29yZy9vcGVuZmxvdy90eXBlcy9BcnBPcGNvZGUuamF2YQpAQCAtMiw3ICsyLDcgQEAKIAogaW1wb3J0IG9yZy5qYm9zcy5uZXR0eS5idWZmZXIuQ2hhbm5lbEJ1ZmZlcjsKIAotcHVibGljIGNsYXNzIEFycE9wY29kZSBpbXBsZW1lbnRzIE9GVmFsdWVUeXBlIHsKK3B1YmxpYyBjbGFzcyBBcnBPcGNvZGUgaW1wbGVtZW50cyBPRlZhbHVlVHlwZTxBcnBPcGNvZGU+IHsKIAogICAgIGZpbmFsIHN0YXRpYyBpbnQgTEVOR1RIID0gMjsKIApAQCAtMTQyLDQgKzE0MiwxNCBAQAogICAgIHB1YmxpYyBzdGF0aWMgQXJwT3Bjb2RlIHJlYWQyQnl0ZXMoQ2hhbm5lbEJ1ZmZlciBjKSB7CiAgICAgICAgIHJldHVybiBBcnBPcGNvZGUub2YoYy5yZWFkVW5zaWduZWRTaG9ydCgpKTsKICAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgQXJwT3Bjb2RlIGFwcGx5TWFzayhBcnBPcGNvZGUgbWFzaykgeworICAgICAgICByZXR1cm4gQXJwT3Bjb2RlLm9mKHRoaXMub3Bjb2RlICYgbWFzay5vcGNvZGUpOworICAgIH0KKyAgICAKKyAgICBwdWJsaWMgaW50IGdldE9wQ29kZSgpIHsKKyAgICAgICAgcmV0dXJuIG9wY29kZTsKKyAgICB9CisgICAgCiB9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YV9nZW4vcHJlLXdyaXR0ZW4vc3JjL21haW4vamF2YS9vcmcvb3BlbmZsb3cvdHlwZXMvRXRoVHlwZS5qYXZhIGIvamF2YV9nZW4vcHJlLXdyaXR0ZW4vc3JjL21haW4vamF2YS9vcmcvb3BlbmZsb3cvdHlwZXMvRXRoVHlwZS5qYXZhCmluZGV4IGYwZjBhMmMuLmVhMTZlNjcgMTAwNjQ0Ci0tLSBhL2phdmFfZ2VuL3ByZS13cml0dGVuL3NyYy9tYWluL2phdmEvb3JnL29wZW5mbG93L3R5cGVzL0V0aFR5cGUuamF2YQorKysgYi9qYXZhX2dlbi9wcmUtd3JpdHRlbi9zcmMvbWFpbi9qYXZhL29yZy9vcGVuZmxvdy90eXBlcy9FdGhUeXBlLmphdmEKQEAgLTgsNyArOCw3IEBACiAgKiAKICAqIEBhdXRob3IgWW90YW0gSGFyY2hvbCAoeW90YW0uaGFyY2hvbEBiaWdzd2l0Y2guY29tKQogICovCi1wdWJsaWMgY2xhc3MgRXRoVHlwZSBpbXBsZW1lbnRzIE9GVmFsdWVUeXBlIHsKK3B1YmxpYyBjbGFzcyBFdGhUeXBlIGltcGxlbWVudHMgT0ZWYWx1ZVR5cGU8RXRoVHlwZT4gewogICAgIHN0YXRpYyBmaW5hbCBpbnQgTEVOR1RIID0gMjsKIAogICAgIHByaXZhdGUgZmluYWwgaW50IHJhd1ZhbHVlOwpAQCAtMjM1LDQgKzIzNSwxNCBAQAogICAgICAgICByZXR1cm4gRXRoVHlwZS5vZihjLnJlYWRVbnNpZ25lZFNob3J0KCkpOwogICAgIH0KIAorICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBFdGhUeXBlIGFwcGx5TWFzayhFdGhUeXBlIG1hc2spIHsKKyAgICAgICAgcmV0dXJuIEV0aFR5cGUub2YodGhpcy5yYXdWYWx1ZSAmIG1hc2sucmF3VmFsdWUpOworICAgIH0KKyAgICAKKyAgICBwdWJsaWMgaW50IGdldFZhbHVlKCkgeworICAgICAgICByZXR1cm4gcmF3VmFsdWU7CisgICAgfQorCisgICAgCiB9CmRpZmYgLS1naXQgYS9qYXZhX2dlbi9wcmUtd3JpdHRlbi9zcmMvbWFpbi9qYXZhL29yZy9vcGVuZmxvdy90eXBlcy9JQ01QdjRDb2RlLmphdmEgYi9qYXZhX2dlbi9wcmUtd3JpdHRlbi9zcmMvbWFpbi9qYXZhL29yZy9vcGVuZmxvdy90eXBlcy9JQ01QdjRDb2RlLmphdmEKaW5kZXggMTQ3YjVmNy4uNDJjYzViZSAxMDA2NDQKLS0tIGEvamF2YV9nZW4vcHJlLXdyaXR0ZW4vc3JjL21haW4vamF2YS9vcmcvb3BlbmZsb3cvdHlwZXMvSUNNUHY0Q29kZS5qYXZhCisrKyBiL2phdmFfZ2VuL3ByZS13cml0dGVuL3NyYy9tYWluL2phdmEvb3JnL29wZW5mbG93L3R5cGVzL0lDTVB2NENvZGUuamF2YQpAQCAtNyw3ICs3LDcgQEAKICAqIEBhdXRob3IgWW90YW0gSGFyY2hvbCAoeW90YW0uaGFyY2hvbEBiaWdzd2l0Y2guY29tKQogICoKICAqLwotcHVibGljIGNsYXNzIElDTVB2NENvZGUgaW1wbGVtZW50cyBPRlZhbHVlVHlwZSB7CitwdWJsaWMgY2xhc3MgSUNNUHY0Q29kZSBpbXBsZW1lbnRzIE9GVmFsdWVUeXBlPElDTVB2NENvZGU+IHsKIAogICAgIGZpbmFsIHN0YXRpYyBpbnQgTEVOR1RIID0gMTsKICAgICBmaW5hbCBzdGF0aWMgc2hvcnQgTUFYX0NPREUgPSAweEZGOwpAQCAtNDEsNCArNDEsMTAgQEAKICAgICAgICAgcmV0dXJuIElDTVB2NENvZGUub2YoYy5yZWFkVW5zaWduZWRCeXRlKCkpOwogICAgIH0KIAorICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBJQ01QdjRDb2RlIGFwcGx5TWFzayhJQ01QdjRDb2RlIG1hc2spIHsKKyAgICAgICAgcmV0dXJuIElDTVB2NENvZGUub2YoKHNob3J0KSh0aGlzLmNvZGUgJiBtYXNrLmNvZGUpKTsKKyAgICB9CisKKyAgICAKIH0KZGlmZiAtLWdpdCBhL2phdmFfZ2VuL3ByZS13cml0dGVuL3NyYy9tYWluL2phdmEvb3JnL29wZW5mbG93L3R5cGVzL0lDTVB2NFR5cGUuamF2YSBiL2phdmFfZ2VuL3ByZS13cml0dGVuL3NyYy9tYWluL2phdmEvb3JnL29wZW5mbG93L3R5cGVzL0lDTVB2NFR5cGUuamF2YQppbmRleCAwMWQ2ZThmLi5iMWJiZGMwIDEwMDY0NAotLS0gYS9qYXZhX2dlbi9wcmUtd3JpdHRlbi9zcmMvbWFpbi9qYXZhL29yZy9vcGVuZmxvdy90eXBlcy9JQ01QdjRUeXBlLmphdmEKKysrIGIvamF2YV9nZW4vcHJlLXdyaXR0ZW4vc3JjL21haW4vamF2YS9vcmcvb3BlbmZsb3cvdHlwZXMvSUNNUHY0VHlwZS5qYXZhCkBAIC0yLDcgKzIsNyBAQAogCiBpbXBvcnQgb3JnLmpib3NzLm5ldHR5LmJ1ZmZlci5DaGFubmVsQnVmZmVyOwogCi1wdWJsaWMgY2xhc3MgSUNNUHY0VHlwZSBpbXBsZW1lbnRzIE9GVmFsdWVUeXBlIHsKK3B1YmxpYyBjbGFzcyBJQ01QdjRUeXBlIGltcGxlbWVudHMgT0ZWYWx1ZVR5cGU8SUNNUHY0VHlwZT4gewogCiAgICAgZmluYWwgc3RhdGljIGludCBMRU5HVEggPSAxOwogCkBAIC0xNTUsNCArMTU1LDEwIEBACiAgICAgICAgIHJldHVybiBJQ01QdjRUeXBlLm9mKGMucmVhZFVuc2lnbmVkQnl0ZSgpKTsKICAgICB9CiAKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgSUNNUHY0VHlwZSBhcHBseU1hc2soSUNNUHY0VHlwZSBtYXNrKSB7CisgICAgICAgIHJldHVybiBJQ01QdjRUeXBlLm9mKChzaG9ydCkodGhpcy50eXBlICYgbWFzay50eXBlKSk7CisgICAgfQorCisgICAgCiB9CmRpZmYgLS1naXQgYS9qYXZhX2dlbi9wcmUtd3JpdHRlbi9zcmMvbWFpbi9qYXZhL29yZy9vcGVuZmxvdy90eXBlcy9JUHY0LmphdmEgYi9qYXZhX2dlbi9wcmUtd3JpdHRlbi9zcmMvbWFpbi9qYXZhL29yZy9vcGVuZmxvdy90eXBlcy9JUHY0LmphdmEKaW5kZXggNzhiOGRkMi4uZjg5ZjY4MyAxMDA2NDQKLS0tIGEvamF2YV9nZW4vcHJlLXdyaXR0ZW4vc3JjL21haW4vamF2YS9vcmcvb3BlbmZsb3cvdHlwZXMvSVB2NC5qYXZhCisrKyBiL2phdmFfZ2VuL3ByZS13cml0dGVuL3NyYy9tYWluL2phdmEvb3JnL29wZW5mbG93L3R5cGVzL0lQdjQuamF2YQpAQCAtOSw3ICs5LDcgQEAKICAqCiAgKiBAYXV0aG9yIEFuZHJlYXMgV3VuZHNhbSA8YW5kcmVhcy53dW5kc2FtQGJpZ3N3aXRjaC5jb20+CiAgKi8KLXB1YmxpYyBjbGFzcyBJUHY0IGltcGxlbWVudHMgT0ZWYWx1ZVR5cGUgeworcHVibGljIGNsYXNzIElQdjQgaW1wbGVtZW50cyBPRlZhbHVlVHlwZTxJUHY0PiB7CiAgICAgc3RhdGljIGZpbmFsIGludCBMRU5HVEggPSA0OwogICAgIHByaXZhdGUgZmluYWwgaW50IHJhd1ZhbHVlOwogCkBAIC0xMjIsNSArMTIyLDExIEBACiAgICAgcHVibGljIHN0YXRpYyBJUHY0IHJlYWQ0Qnl0ZXMoQ2hhbm5lbEJ1ZmZlciBjKSB7CiAgICAgICAgIHJldHVybiBJUHY0Lm9mKGMucmVhZEludCgpKTsKICAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgSVB2NCBhcHBseU1hc2soSVB2NCBtYXNrKSB7CisgICAgICAgIHJldHVybiBJUHY0Lm9mKHRoaXMucmF3VmFsdWUgJiBtYXNrLnJhd1ZhbHVlKTsKKyAgICB9CisKICAgICAKIH0KZGlmZiAtLWdpdCBhL2phdmFfZ2VuL3ByZS13cml0dGVuL3NyYy9tYWluL2phdmEvb3JnL29wZW5mbG93L3R5cGVzL0lQdjRXaXRoTWFzay5qYXZhIGIvamF2YV9nZW4vcHJlLXdyaXR0ZW4vc3JjL21haW4vamF2YS9vcmcvb3BlbmZsb3cvdHlwZXMvSVB2NFdpdGhNYXNrLmphdmEKaW5kZXggYWZiODllZC4uYzI0YzRmZCAxMDA2NDQKLS0tIGEvamF2YV9nZW4vcHJlLXdyaXR0ZW4vc3JjL21haW4vamF2YS9vcmcvb3BlbmZsb3cvdHlwZXMvSVB2NFdpdGhNYXNrLmphdmEKKysrIGIvamF2YV9nZW4vcHJlLXdyaXR0ZW4vc3JjL21haW4vamF2YS9vcmcvb3BlbmZsb3cvdHlwZXMvSVB2NFdpdGhNYXNrLmphdmEKQEAgLTM2LDcgKzM2LDcgQEAKICAgICAgICAgcmV0dXJuIHJlcy50b1N0cmluZygpOwogICAgIH0KICAgICAKLSAgICBwdWJsaWMgc3RhdGljIE9GVmFsdWVUeXBlIG9mUG9zc2libHlNYXNrZWQoZmluYWwgU3RyaW5nIHN0cmluZykgeworICAgIHB1YmxpYyBzdGF0aWMgT0ZWYWx1ZVR5cGU8Pz4gb2ZQb3NzaWJseU1hc2tlZChmaW5hbCBTdHJpbmcgc3RyaW5nKSB7CiAgICAgICAgIGludCBzbGFzaFBvczsKICAgICAgICAgU3RyaW5nIGlwID0gc3RyaW5nOwogICAgICAgICBpbnQgbWFza0JpdHMgPSAwOwpkaWZmIC0tZ2l0IGEvamF2YV9nZW4vcHJlLXdyaXR0ZW4vc3JjL21haW4vamF2YS9vcmcvb3BlbmZsb3cvdHlwZXMvSVB2Ni5qYXZhIGIvamF2YV9nZW4vcHJlLXdyaXR0ZW4vc3JjL21haW4vamF2YS9vcmcvb3BlbmZsb3cvdHlwZXMvSVB2Ni5qYXZhCmluZGV4IGUzMTY2ZmQuLjIwMGEzM2QgMTAwNjQ0Ci0tLSBhL2phdmFfZ2VuL3ByZS13cml0dGVuL3NyYy9tYWluL2phdmEvb3JnL29wZW5mbG93L3R5cGVzL0lQdjYuamF2YQorKysgYi9qYXZhX2dlbi9wcmUtd3JpdHRlbi9zcmMvbWFpbi9qYXZhL29yZy9vcGVuZmxvdy90eXBlcy9JUHY2LmphdmEKQEAgLTExLDcgKzExLDcgQEAKICAqCiAgKiBAYXV0aG9yIEFuZHJlYXMgV3VuZHNhbSA8YW5kcmVhcy53dW5kc2FtQHRlbGV0ZWFjaC5kZT4KICAqLwotcHVibGljIGNsYXNzIElQdjYgaW1wbGVtZW50cyBPRlZhbHVlVHlwZSB7CitwdWJsaWMgY2xhc3MgSVB2NiBpbXBsZW1lbnRzIE9GVmFsdWVUeXBlPElQdjY+IHsKICAgICBzdGF0aWMgZmluYWwgaW50IExFTkdUSCA9IDE2OwogICAgIHByaXZhdGUgZmluYWwgbG9uZyByYXcxOwogICAgIHByaXZhdGUgZmluYWwgbG9uZyByYXcyOwpAQCAtMjc4LDQgKzI3OCw5IEBACiAgICAgcHVibGljIHN0YXRpYyBJUHY2IHJlYWQxNkJ5dGVzKENoYW5uZWxCdWZmZXIgYykgdGhyb3dzIE9GUGFyc2VFcnJvciB7CiAgICAgICAgIHJldHVybiBJUHY2Lm9mKGMucmVhZExvbmcoKSwgYy5yZWFkTG9uZygpKTsKICAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgSVB2NiBhcHBseU1hc2soSVB2NiBtYXNrKSB7CisgICAgICAgIHJldHVybiBJUHY2Lm9mKHRoaXMucmF3MSAmIG1hc2sucmF3MSwgdGhpcy5yYXcyICYgbWFzay5yYXcyKTsKKyAgICB9CiB9CmRpZmYgLS1naXQgYS9qYXZhX2dlbi9wcmUtd3JpdHRlbi9zcmMvbWFpbi9qYXZhL29yZy9vcGVuZmxvdy90eXBlcy9JUHY2Rmxvd0xhYmVsLmphdmEgYi9qYXZhX2dlbi9wcmUtd3JpdHRlbi9zcmMvbWFpbi9qYXZhL29yZy9vcGVuZmxvdy90eXBlcy9JUHY2Rmxvd0xhYmVsLmphdmEKaW5kZXggNmQ5YmZiNS4uZDQ5ZTRlMiAxMDA2NDQKLS0tIGEvamF2YV9nZW4vcHJlLXdyaXR0ZW4vc3JjL21haW4vamF2YS9vcmcvb3BlbmZsb3cvdHlwZXMvSVB2NkZsb3dMYWJlbC5qYXZhCisrKyBiL2phdmFfZ2VuL3ByZS13cml0dGVuL3NyYy9tYWluL2phdmEvb3JnL29wZW5mbG93L3R5cGVzL0lQdjZGbG93TGFiZWwuamF2YQpAQCAtMyw3ICszLDcgQEAKIGltcG9ydCBvcmcuamJvc3MubmV0dHkuYnVmZmVyLkNoYW5uZWxCdWZmZXI7CiBpbXBvcnQgb3JnLm9wZW5mbG93LmV4Y2VwdGlvbnMuT0ZQYXJzZUVycm9yOwogCi1wdWJsaWMgY2xhc3MgSVB2NkZsb3dMYWJlbCBpbXBsZW1lbnRzIE9GVmFsdWVUeXBlIHsKK3B1YmxpYyBjbGFzcyBJUHY2Rmxvd0xhYmVsIGltcGxlbWVudHMgT0ZWYWx1ZVR5cGU8SVB2NkZsb3dMYWJlbD4gewogCiAgICAgc3RhdGljIGZpbmFsIGludCBMRU5HVEggPSA0OwogICAgIApAQCAtNTMsNCArNTMsMTIgQEAKICAgICAgICAgcmV0dXJuIElQdjZGbG93TGFiZWwub2YoKGludCkoYy5yZWFkVW5zaWduZWRJbnQoKSAmIDB4RkZGRkZGRkYpKTsKICAgICB9CiAKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgSVB2NkZsb3dMYWJlbCBhcHBseU1hc2soSVB2NkZsb3dMYWJlbCBtYXNrKSB7CisgICAgICAgIHJldHVybiBJUHY2Rmxvd0xhYmVsLm9mKHRoaXMubGFiZWwgJiBtYXNrLmxhYmVsKTsKKyAgICB9CisKKyAgICBwdWJsaWMgaW50IGdldElQdjZGbG93TGFiZWxWYWx1ZSgpIHsKKyAgICAgICAgcmV0dXJuIGxhYmVsOworICAgIH0KIH0KZGlmZiAtLWdpdCBhL2phdmFfZ2VuL3ByZS13cml0dGVuL3NyYy9tYWluL2phdmEvb3JnL29wZW5mbG93L3R5cGVzL0lQdjZXaXRoTWFzay5qYXZhIGIvamF2YV9nZW4vcHJlLXdyaXR0ZW4vc3JjL21haW4vamF2YS9vcmcvb3BlbmZsb3cvdHlwZXMvSVB2NldpdGhNYXNrLmphdmEKaW5kZXggZjgwOWQ2Ny4uNzIzMTllMyAxMDA2NDQKLS0tIGEvamF2YV9nZW4vcHJlLXdyaXR0ZW4vc3JjL21haW4vamF2YS9vcmcvb3BlbmZsb3cvdHlwZXMvSVB2NldpdGhNYXNrLmphdmEKKysrIGIvamF2YV9nZW4vcHJlLXdyaXR0ZW4vc3JjL21haW4vamF2YS9vcmcvb3BlbmZsb3cvdHlwZXMvSVB2NldpdGhNYXNrLmphdmEKQEAgLTMxLDcgKzMxLDcgQEAKICAgICAgICAgcmV0dXJuIHJlcy50b1N0cmluZygpOwogICAgIH0KICAgICAKLSAgICBwdWJsaWMgc3RhdGljIE9GVmFsdWVUeXBlIG9mUG9zc2libHlNYXNrZWQoZmluYWwgU3RyaW5nIHN0cmluZykgeworICAgIHB1YmxpYyBzdGF0aWMgT0ZWYWx1ZVR5cGU8Pz4gb2ZQb3NzaWJseU1hc2tlZChmaW5hbCBTdHJpbmcgc3RyaW5nKSB7CiAgICAgICAgIGludCBzbGFzaFBvczsKICAgICAgICAgU3RyaW5nIGlwID0gc3RyaW5nOwogICAgICAgICBpbnQgbWFza0JpdHMgPSAwOwpkaWZmIC0tZ2l0IGEvamF2YV9nZW4vcHJlLXdyaXR0ZW4vc3JjL21haW4vamF2YS9vcmcvb3BlbmZsb3cvdHlwZXMvSXBEc2NwLmphdmEgYi9qYXZhX2dlbi9wcmUtd3JpdHRlbi9zcmMvbWFpbi9qYXZhL29yZy9vcGVuZmxvdy90eXBlcy9JcERzY3AuamF2YQppbmRleCAwMzNlNTc0Li40NGU2Mjk2IDEwMDY0NAotLS0gYS9qYXZhX2dlbi9wcmUtd3JpdHRlbi9zcmMvbWFpbi9qYXZhL29yZy9vcGVuZmxvdy90eXBlcy9JcERzY3AuamF2YQorKysgYi9qYXZhX2dlbi9wcmUtd3JpdHRlbi9zcmMvbWFpbi9qYXZhL29yZy9vcGVuZmxvdy90eXBlcy9JcERzY3AuamF2YQpAQCAtMyw3ICszLDcgQEAKIGltcG9ydCBvcmcuamJvc3MubmV0dHkuYnVmZmVyLkNoYW5uZWxCdWZmZXI7CiBpbXBvcnQgb3JnLm9wZW5mbG93LmV4Y2VwdGlvbnMuT0ZQYXJzZUVycm9yOwogCi1wdWJsaWMgZW51bSBJcERzY3AgaW1wbGVtZW50cyBPRlZhbHVlVHlwZSB7CitwdWJsaWMgZW51bSBJcERzY3AgaW1wbGVtZW50cyBPRlZhbHVlVHlwZTxJcERzY3A+IHsKICAgICBEU0NQXzAoKGJ5dGUpMCksCiAgICAgRFNDUF8xKChieXRlKTEpLAogICAgIERTQ1BfMigoYnl0ZSkyKSwKQEAgLTIzMCw0ICsyMzAsMTIgQEAKICAgICAgICAgcmV0dXJuIElwRHNjcC5vZigoYnl0ZSkoYy5yZWFkVW5zaWduZWRCeXRlKCkpKTsKICAgICB9CiAKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgSXBEc2NwIGFwcGx5TWFzayhJcERzY3AgbWFzaykgeworICAgICAgICByZXR1cm4gSXBEc2NwLm9mKChieXRlKSh0aGlzLmRzY3AgJiBtYXNrLmRzY3ApKTsKKyAgICB9CisKKyAgICBwdWJsaWMgYnl0ZSBnZXREc2NwVmFsdWUoKSB7CisgICAgICAgIHJldHVybiBkc2NwOworICAgIH0KIH0KZGlmZiAtLWdpdCBhL2phdmFfZ2VuL3ByZS13cml0dGVuL3NyYy9tYWluL2phdmEvb3JnL29wZW5mbG93L3R5cGVzL0lwRWNuLmphdmEgYi9qYXZhX2dlbi9wcmUtd3JpdHRlbi9zcmMvbWFpbi9qYXZhL29yZy9vcGVuZmxvdy90eXBlcy9JcEVjbi5qYXZhCmluZGV4IGIyNjFkNDEuLjkwNjAwZGYgMTAwNjQ0Ci0tLSBhL2phdmFfZ2VuL3ByZS13cml0dGVuL3NyYy9tYWluL2phdmEvb3JnL29wZW5mbG93L3R5cGVzL0lwRWNuLmphdmEKKysrIGIvamF2YV9nZW4vcHJlLXdyaXR0ZW4vc3JjL21haW4vamF2YS9vcmcvb3BlbmZsb3cvdHlwZXMvSXBFY24uamF2YQpAQCAtMyw3ICszLDcgQEAKIGltcG9ydCBvcmcuamJvc3MubmV0dHkuYnVmZmVyLkNoYW5uZWxCdWZmZXI7CiBpbXBvcnQgb3JnLm9wZW5mbG93LmV4Y2VwdGlvbnMuT0ZQYXJzZUVycm9yOwogCi1wdWJsaWMgZW51bSBJcEVjbiBpbXBsZW1lbnRzIE9GVmFsdWVUeXBlIHsKK3B1YmxpYyBlbnVtIElwRWNuIGltcGxlbWVudHMgT0ZWYWx1ZVR5cGU8SXBFY24+IHsKICAgICBFQ05fMDAoKGJ5dGUpMCksCiAgICAgRUNOXzAxKChieXRlKTEpLAogICAgIEVDTl8xMCgoYnl0ZSkyKSwKQEAgLTUwLDQgKzUwLDEyIEBACiAgICAgICAgIHJldHVybiBJcEVjbi5vZigoYnl0ZSkoYy5yZWFkVW5zaWduZWRCeXRlKCkpKTsKICAgICB9CiAKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgSXBFY24gYXBwbHlNYXNrKElwRWNuIG1hc2spIHsKKyAgICAgICAgcmV0dXJuIElwRWNuLm9mKChieXRlKSh0aGlzLmVjbiAmIG1hc2suZWNuKSk7CisgICAgfQorCisgICAgcHVibGljIGJ5dGUgZ2V0RWNuVmFsdWUoKSB7CisgICAgICAgIHJldHVybiBlY247CisgICAgfQogfQpkaWZmIC0tZ2l0IGEvamF2YV9nZW4vcHJlLXdyaXR0ZW4vc3JjL21haW4vamF2YS9vcmcvb3BlbmZsb3cvdHlwZXMvSXBQcm90b2NvbC5qYXZhIGIvamF2YV9nZW4vcHJlLXdyaXR0ZW4vc3JjL21haW4vamF2YS9vcmcvb3BlbmZsb3cvdHlwZXMvSXBQcm90b2NvbC5qYXZhCmluZGV4IDQzNmRiMWQuLmY0MGVkZWQgMTAwNjQ0Ci0tLSBhL2phdmFfZ2VuL3ByZS13cml0dGVuL3NyYy9tYWluL2phdmEvb3JnL29wZW5mbG93L3R5cGVzL0lwUHJvdG9jb2wuamF2YQorKysgYi9qYXZhX2dlbi9wcmUtd3JpdHRlbi9zcmMvbWFpbi9qYXZhL29yZy9vcGVuZmxvdy90eXBlcy9JcFByb3RvY29sLmphdmEKQEAgLTcsNyArNyw3IEBACiAgKiAKICAqIEBhdXRob3IgWW90YW0gSGFyY2hvbCAoeW90YW0uaGFyY2hvbEBiaWdzd2l0Y2guY29tKQogICovCi1wdWJsaWMgY2xhc3MgSXBQcm90b2NvbCBpbXBsZW1lbnRzIE9GVmFsdWVUeXBlIHsKK3B1YmxpYyBjbGFzcyBJcFByb3RvY29sIGltcGxlbWVudHMgT0ZWYWx1ZVR5cGU8SXBQcm90b2NvbD4gewogCiAgICAgc3RhdGljIGZpbmFsIHNob3J0IE1BWF9QUk9UTyA9IDB4RkY7CiAgICAgc3RhdGljIGZpbmFsIGludCBMRU5HVEggPSAxOwpAQCAtNjMyLDQgKzYzMiwxNCBAQAogICAgIHB1YmxpYyBzdGF0aWMgSXBQcm90b2NvbCByZWFkQnl0ZShDaGFubmVsQnVmZmVyIGMpIHsKICAgICAgICAgcmV0dXJuIElwUHJvdG9jb2wub2YoYy5yZWFkVW5zaWduZWRCeXRlKCkpOwogICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBJcFByb3RvY29sIGFwcGx5TWFzayhJcFByb3RvY29sIG1hc2spIHsKKyAgICAgICAgcmV0dXJuIElwUHJvdG9jb2wub2YoKHNob3J0KSh0aGlzLnByb3RvICYgbWFzay5wcm90bykpOworICAgIH0KKworICAgIHB1YmxpYyBzaG9ydCBnZXRJcFByb3RvY29sTnVtYmVyKCkgeworICAgICAgICByZXR1cm4gcHJvdG87CisgICAgfQorICAgIAogfQpkaWZmIC0tZ2l0IGEvamF2YV9nZW4vcHJlLXdyaXR0ZW4vc3JjL21haW4vamF2YS9vcmcvb3BlbmZsb3cvdHlwZXMvTWFjQWRkcmVzcy5qYXZhIGIvamF2YV9nZW4vcHJlLXdyaXR0ZW4vc3JjL21haW4vamF2YS9vcmcvb3BlbmZsb3cvdHlwZXMvTWFjQWRkcmVzcy5qYXZhCmluZGV4IGExOGRmZjMuLmNiOGNlODQgMTAwNjQ0Ci0tLSBhL2phdmFfZ2VuL3ByZS13cml0dGVuL3NyYy9tYWluL2phdmEvb3JnL29wZW5mbG93L3R5cGVzL01hY0FkZHJlc3MuamF2YQorKysgYi9qYXZhX2dlbi9wcmUtd3JpdHRlbi9zcmMvbWFpbi9qYXZhL29yZy9vcGVuZmxvdy90eXBlcy9NYWNBZGRyZXNzLmphdmEKQEAgLTEwLDcgKzEwLDcgQEAKICAqIEBhdXRob3IgQW5kcmVhcyBXdW5kc2FtIDxhbmRyZWFzLnd1bmRzYW1AYmlnc3dpdGNoLmNvbT4KICAqLwogCi1wdWJsaWMgY2xhc3MgTWFjQWRkcmVzcyBpbXBsZW1lbnRzIE9GVmFsdWVUeXBlIHsKK3B1YmxpYyBjbGFzcyBNYWNBZGRyZXNzIGltcGxlbWVudHMgT0ZWYWx1ZVR5cGU8TWFjQWRkcmVzcz4gewogICAgIHN0YXRpYyBmaW5hbCBpbnQgTWFjQWRkckxlbiA9IDY7CiAgICAgcHJpdmF0ZSBmaW5hbCBsb25nIHJhd1ZhbHVlOwogCkBAIC0xMTYsNiArMTE2LDExIEBACiAgICAgICAgIGxvbmcgcmF3ID0gYy5yZWFkVW5zaWduZWRJbnQoKSA8PCAxNiB8IGMucmVhZFVuc2lnbmVkU2hvcnQoKTsKICAgICAgICAgcmV0dXJuIE1hY0FkZHJlc3Mub2YocmF3KTsKICAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgTWFjQWRkcmVzcyBhcHBseU1hc2soTWFjQWRkcmVzcyBtYXNrKSB7CisgICAgICAgIHJldHVybiBNYWNBZGRyZXNzLm9mKHRoaXMucmF3VmFsdWUgJiBtYXNrLnJhd1ZhbHVlKTsKKyAgICB9CiAgICAgCiAgICAgCiAKZGlmZiAtLWdpdCBhL2phdmFfZ2VuL3ByZS13cml0dGVuL3NyYy9tYWluL2phdmEvb3JnL29wZW5mbG93L3R5cGVzL01hc2tlZC5qYXZhIGIvamF2YV9nZW4vcHJlLXdyaXR0ZW4vc3JjL21haW4vamF2YS9vcmcvb3BlbmZsb3cvdHlwZXMvTWFza2VkLmphdmEKaW5kZXggMDExYmFlOC4uNDMzY2E5ZCAxMDA2NDQKLS0tIGEvamF2YV9nZW4vcHJlLXdyaXR0ZW4vc3JjL21haW4vamF2YS9vcmcvb3BlbmZsb3cvdHlwZXMvTWFza2VkLmphdmEKKysrIGIvamF2YV9nZW4vcHJlLXdyaXR0ZW4vc3JjL21haW4vamF2YS9vcmcvb3BlbmZsb3cvdHlwZXMvTWFza2VkLmphdmEKQEAgLTIsMTIgKzIsMTIgQEAKIAogCiAKLXB1YmxpYyBjbGFzcyBNYXNrZWQ8VCBleHRlbmRzIE9GVmFsdWVUeXBlPiBpbXBsZW1lbnRzIE9GVmFsdWVUeXBlIHsKK3B1YmxpYyBjbGFzcyBNYXNrZWQ8VCBleHRlbmRzIE9GVmFsdWVUeXBlPFQ+PiBpbXBsZW1lbnRzIE9GVmFsdWVUeXBlPE1hc2tlZDxUPj4gewogICAgIHByb3RlY3RlZCBUIHZhbHVlOwogICAgIHByb3RlY3RlZCBUIG1hc2s7CiAgICAgCiAgICAgcHJvdGVjdGVkIE1hc2tlZChUIHZhbHVlLCBUIG1hc2spIHsKLSAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlOworICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWUuYXBwbHlNYXNrKG1hc2spOwogICAgICAgICB0aGlzLm1hc2sgPSBtYXNrOwogICAgIH0KICAgICAKQEAgLTE4LDYgKzE4LDEwIEBACiAgICAgcHVibGljIFQgZ2V0TWFzaygpIHsKICAgICAgICAgcmV0dXJuIG1hc2s7CiAgICAgfQorICAgIAorICAgIHB1YmxpYyBzdGF0aWMgPFQgZXh0ZW5kcyBPRlZhbHVlVHlwZTxUPj4gTWFza2VkPFQ+IG9mKFQgdmFsdWUsIFQgbWFzaykgeworICAgICAgICByZXR1cm4gbmV3IE1hc2tlZDxUPih2YWx1ZSwgbWFzayk7CisgICAgfQogCiAgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIGludCBnZXRMZW5ndGgoKSB7CkBAIC00OCw1ICs1MiwxMCBAQAogICAgICAgICBzYi5hcHBlbmQodmFsdWUudG9TdHJpbmcoKSkuYXBwZW5kKCcvJykuYXBwZW5kKG1hc2sudG9TdHJpbmcoKSk7CiAgICAgICAgIHJldHVybiBzYi50b1N0cmluZygpOwogICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBNYXNrZWQ8VD4gYXBwbHlNYXNrKE1hc2tlZDxUPiBtYXNrKSB7CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH0KICAgICAKIH0KZGlmZiAtLWdpdCBhL2phdmFfZ2VuL3ByZS13cml0dGVuL3NyYy9tYWluL2phdmEvb3JnL29wZW5mbG93L3R5cGVzL09GUGh5c2ljYWxQb3J0LmphdmEgYi9qYXZhX2dlbi9wcmUtd3JpdHRlbi9zcmMvbWFpbi9qYXZhL29yZy9vcGVuZmxvdy90eXBlcy9PRlBoeXNpY2FsUG9ydC5qYXZhCmluZGV4IGQ4ZjcxYTMuLjc3NTVhNGEgMTAwNjQ0Ci0tLSBhL2phdmFfZ2VuL3ByZS13cml0dGVuL3NyYy9tYWluL2phdmEvb3JnL29wZW5mbG93L3R5cGVzL09GUGh5c2ljYWxQb3J0LmphdmEKKysrIGIvamF2YV9nZW4vcHJlLXdyaXR0ZW4vc3JjL21haW4vamF2YS9vcmcvb3BlbmZsb3cvdHlwZXMvT0ZQaHlzaWNhbFBvcnQuamF2YQpAQCAtMTAsNyArMTAsNyBAQAogICogQGF1dGhvciBjYXB2ZWcKICAqLwogCi1wdWJsaWMgY2xhc3MgT0ZQaHlzaWNhbFBvcnQgaW1wbGVtZW50cyBPRlZhbHVlVHlwZSB7CitwdWJsaWMgY2xhc3MgT0ZQaHlzaWNhbFBvcnQgaW1wbGVtZW50cyBPRlZhbHVlVHlwZTxPRlBoeXNpY2FsUG9ydD4gewogCiAgICAgc3RhdGljIGZpbmFsIGludCBMRU5HVEggPSA0OwogICAgIApAQCAtNjAsNCArNjAsMTIgQEAKICAgICAgICAgcmV0dXJuIE9GUGh5c2ljYWxQb3J0Lm9mKChpbnQpKGMucmVhZFVuc2lnbmVkSW50KCkgJiAweEZGRkZGRkZGKSk7CiAgICAgfQogCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIE9GUGh5c2ljYWxQb3J0IGFwcGx5TWFzayhPRlBoeXNpY2FsUG9ydCBtYXNrKSB7CisgICAgICAgIHJldHVybiBPRlBoeXNpY2FsUG9ydC5vZih0aGlzLnBvcnQgJiBtYXNrLnBvcnQpOworICAgIH0KKworICAgIHB1YmxpYyBpbnQgZ2V0UG9ydE51bWJlcigpIHsKKyAgICAgICAgcmV0dXJuIHBvcnQ7CisgICAgfQogfQpkaWZmIC0tZ2l0IGEvamF2YV9nZW4vcHJlLXdyaXR0ZW4vc3JjL21haW4vamF2YS9vcmcvb3BlbmZsb3cvdHlwZXMvT0ZQb3J0LmphdmEgYi9qYXZhX2dlbi9wcmUtd3JpdHRlbi9zcmMvbWFpbi9qYXZhL29yZy9vcGVuZmxvdy90eXBlcy9PRlBvcnQuamF2YQppbmRleCAzMjcyNjYwLi45ZGMxOTdmIDEwMDY0NAotLS0gYS9qYXZhX2dlbi9wcmUtd3JpdHRlbi9zcmMvbWFpbi9qYXZhL29yZy9vcGVuZmxvdy90eXBlcy9PRlBvcnQuamF2YQorKysgYi9qYXZhX2dlbi9wcmUtd3JpdHRlbi9zcmMvbWFpbi9qYXZhL29yZy9vcGVuZmxvdy90eXBlcy9PRlBvcnQuamF2YQpAQCAtMTUsNyArMTUsNyBAQAogICogQGF1dGhvciBBbmRyZWFzIFd1bmRzYW0gPGFuZHJlYXMud3VuZHNhbUBiaWdzd2l0Y2guY29tPgogICovCiBASW1tdXRhYmxlCi1wdWJsaWMgY2xhc3MgT0ZQb3J0IGltcGxlbWVudHMgT0ZWYWx1ZVR5cGUgeworcHVibGljIGNsYXNzIE9GUG9ydCBpbXBsZW1lbnRzIE9GVmFsdWVUeXBlPE9GUG9ydD4gewogICAgIHN0YXRpYyBmaW5hbCBpbnQgTEVOR1RIID0gNDsKICAgICAKICAgICAvLyBwcml2YXRlIGludCBjb25zdGFudHMgKE9GMS4xKykgdG8gYXZvaWQgZHVwbGljYXRpb24gaW4gdGhlIGNvZGUKQEAgLTUzMCw0ICs1MzAsOSBAQAogICAgIHB1YmxpYyBzdGF0aWMgT0ZQb3J0IHJlYWQ0Qnl0ZXMoQ2hhbm5lbEJ1ZmZlciBjKSB0aHJvd3MgT0ZQYXJzZUVycm9yIHsKICAgICAgICAgcmV0dXJuIE9GUG9ydC5vZigoaW50KShjLnJlYWRVbnNpZ25lZEludCgpICYgMHhGRkZGRkZGRikpOwogICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBPRlBvcnQgYXBwbHlNYXNrKE9GUG9ydCBtYXNrKSB7CisgICAgICAgIHJldHVybiBPRlBvcnQub2YodGhpcy5wb3J0TnVtYmVyICYgbWFzay5wb3J0TnVtYmVyKTsKKyAgICB9CiB9CmRpZmYgLS1naXQgYS9qYXZhX2dlbi9wcmUtd3JpdHRlbi9zcmMvbWFpbi9qYXZhL29yZy9vcGVuZmxvdy90eXBlcy9PRlZhbHVlVHlwZS5qYXZhIGIvamF2YV9nZW4vcHJlLXdyaXR0ZW4vc3JjL21haW4vamF2YS9vcmcvb3BlbmZsb3cvdHlwZXMvT0ZWYWx1ZVR5cGUuamF2YQppbmRleCA1MWM4YjM2Li44ZTJmOWVkIDEwMDY0NAotLS0gYS9qYXZhX2dlbi9wcmUtd3JpdHRlbi9zcmMvbWFpbi9qYXZhL29yZy9vcGVuZmxvdy90eXBlcy9PRlZhbHVlVHlwZS5qYXZhCisrKyBiL2phdmFfZ2VuL3ByZS13cml0dGVuL3NyYy9tYWluL2phdmEvb3JnL29wZW5mbG93L3R5cGVzL09GVmFsdWVUeXBlLmphdmEKQEAgLTMsOCArMywxMCBAQAogCiAKIAotcHVibGljIGludGVyZmFjZSBPRlZhbHVlVHlwZSB7CitwdWJsaWMgaW50ZXJmYWNlIE9GVmFsdWVUeXBlPFQgZXh0ZW5kcyBPRlZhbHVlVHlwZTxUPj4gewogCiAgICAgcHVibGljIGludCBnZXRMZW5ndGgoKTsKKyAgICAKKyAgICBwdWJsaWMgVCBhcHBseU1hc2soVCBtYXNrKTsKIAogfQpkaWZmIC0tZ2l0IGEvamF2YV9nZW4vcHJlLXdyaXR0ZW4vc3JjL21haW4vamF2YS9vcmcvb3BlbmZsb3cvdHlwZXMvVHJhbnNwb3J0UG9ydC5qYXZhIGIvamF2YV9nZW4vcHJlLXdyaXR0ZW4vc3JjL21haW4vamF2YS9vcmcvb3BlbmZsb3cvdHlwZXMvVHJhbnNwb3J0UG9ydC5qYXZhCmluZGV4IGNlY2IzNDkuLjgyZGFiNDEgMTAwNjQ0Ci0tLSBhL2phdmFfZ2VuL3ByZS13cml0dGVuL3NyYy9tYWluL2phdmEvb3JnL29wZW5mbG93L3R5cGVzL1RyYW5zcG9ydFBvcnQuamF2YQorKysgYi9qYXZhX2dlbi9wcmUtd3JpdHRlbi9zcmMvbWFpbi9qYXZhL29yZy9vcGVuZmxvdy90eXBlcy9UcmFuc3BvcnRQb3J0LmphdmEKQEAgLTgsNyArOCw3IEBACiAgKiAKICAqIEBhdXRob3IgWW90YW0gSGFyY2hvbCAoeW90YW0uaGFyY2hvbEBiaWdzd2l0Y2guY29tKQogICovCi1wdWJsaWMgY2xhc3MgVHJhbnNwb3J0UG9ydCBpbXBsZW1lbnRzIE9GVmFsdWVUeXBlIHsKK3B1YmxpYyBjbGFzcyBUcmFuc3BvcnRQb3J0IGltcGxlbWVudHMgT0ZWYWx1ZVR5cGU8VHJhbnNwb3J0UG9ydD4gewogICAgIAogICAgIHN0YXRpYyBmaW5hbCBpbnQgTEVOR1RIID0gMjsKICAgICBzdGF0aWMgZmluYWwgaW50IE1BWF9QT1JUID0gMHhGRkZGOwpAQCAtMzEsNiArMzEsMTAgQEAKICAgICBwdWJsaWMgaW50IGdldExlbmd0aCgpIHsKICAgICAgICAgcmV0dXJuIExFTkdUSDsKICAgICB9CisgICAgCisgICAgcHVibGljIGludCBnZXRQb3J0KCkgeworICAgICAgICByZXR1cm4gcG9ydDsKKyAgICB9CiAKICAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgYm9vbGVhbiBlcXVhbHMoT2JqZWN0IG9iaikgewpAQCAtNjMsNCArNjcsOSBAQAogICAgICAgICByZXR1cm4gVHJhbnNwb3J0UG9ydC5vZigoYy5yZWFkVW5zaWduZWRTaG9ydCgpICYgMHgwRkZGRikpOwogICAgIH0KIAorICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBUcmFuc3BvcnRQb3J0IGFwcGx5TWFzayhUcmFuc3BvcnRQb3J0IG1hc2spIHsKKyAgICAgICAgcmV0dXJuIFRyYW5zcG9ydFBvcnQub2YodGhpcy5wb3J0ICYgbWFzay5wb3J0KTsKKyAgICB9CisgICAgCiB9CmRpZmYgLS1naXQgYS9qYXZhX2dlbi9wcmUtd3JpdHRlbi9zcmMvbWFpbi9qYXZhL29yZy9vcGVuZmxvdy90eXBlcy9WbGFuUGNwLmphdmEgYi9qYXZhX2dlbi9wcmUtd3JpdHRlbi9zcmMvbWFpbi9qYXZhL29yZy9vcGVuZmxvdy90eXBlcy9WbGFuUGNwLmphdmEKaW5kZXggMmY0MDZjOC4uNTMxZjg3OCAxMDA2NDQKLS0tIGEvamF2YV9nZW4vcHJlLXdyaXR0ZW4vc3JjL21haW4vamF2YS9vcmcvb3BlbmZsb3cvdHlwZXMvVmxhblBjcC5qYXZhCisrKyBiL2phdmFfZ2VuL3ByZS13cml0dGVuL3NyYy9tYWluL2phdmEvb3JnL29wZW5mbG93L3R5cGVzL1ZsYW5QY3AuamF2YQpAQCAtMyw3ICszLDcgQEAKIGltcG9ydCBvcmcuamJvc3MubmV0dHkuYnVmZmVyLkNoYW5uZWxCdWZmZXI7CiBpbXBvcnQgb3JnLm9wZW5mbG93LmV4Y2VwdGlvbnMuT0ZQYXJzZUVycm9yOwogCi1wdWJsaWMgY2xhc3MgVmxhblBjcCBpbXBsZW1lbnRzIE9GVmFsdWVUeXBlIHsKK3B1YmxpYyBjbGFzcyBWbGFuUGNwIGltcGxlbWVudHMgT0ZWYWx1ZVR5cGU8VmxhblBjcD4gewogICAgIAogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGJ5dGUgVkFMSURBVElPTl9NQVNLID0gMHgwNzsKICAgICBzdGF0aWMgZmluYWwgaW50IExFTkdUSCA9IDE7IApAQCAtNTcsNSArNTcsMTAgQEAKICAgICBwdWJsaWMgc3RhdGljIFZsYW5QY3AgcmVhZEJ5dGUoQ2hhbm5lbEJ1ZmZlciBjKSB0aHJvd3MgT0ZQYXJzZUVycm9yIHsKICAgICAgICAgcmV0dXJuIFZsYW5QY3Aub2YoKGJ5dGUpKGMucmVhZFVuc2lnbmVkQnl0ZSgpICYgMHhGRikpOwogICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBWbGFuUGNwIGFwcGx5TWFzayhWbGFuUGNwIG1hc2spIHsKKyAgICAgICAgcmV0dXJuIFZsYW5QY3Aub2YoKGJ5dGUpKHRoaXMucGNwICYgbWFzay5wY3ApKTsKKyAgICB9CiAgICAgCiB9CmRpZmYgLS1naXQgYS9qYXZhX2dlbi9wcmUtd3JpdHRlbi9zcmMvbWFpbi9qYXZhL29yZy9vcGVuZmxvdy90eXBlcy9WbGFuVmlkLmphdmEgYi9qYXZhX2dlbi9wcmUtd3JpdHRlbi9zcmMvbWFpbi9qYXZhL29yZy9vcGVuZmxvdy90eXBlcy9WbGFuVmlkLmphdmEKaW5kZXggYTJiMzhiMi4uY2EyYzNjMiAxMDA2NDQKLS0tIGEvamF2YV9nZW4vcHJlLXdyaXR0ZW4vc3JjL21haW4vamF2YS9vcmcvb3BlbmZsb3cvdHlwZXMvVmxhblZpZC5qYXZhCisrKyBiL2phdmFfZ2VuL3ByZS13cml0dGVuL3NyYy9tYWluL2phdmEvb3JnL29wZW5mbG93L3R5cGVzL1ZsYW5WaWQuamF2YQpAQCAtMyw3ICszLDcgQEAKIGltcG9ydCBvcmcuamJvc3MubmV0dHkuYnVmZmVyLkNoYW5uZWxCdWZmZXI7CiBpbXBvcnQgb3JnLm9wZW5mbG93LmV4Y2VwdGlvbnMuT0ZQYXJzZUVycm9yOwogCi1wdWJsaWMgY2xhc3MgVmxhblZpZCBpbXBsZW1lbnRzIE9GVmFsdWVUeXBlIHsKK3B1YmxpYyBjbGFzcyBWbGFuVmlkIGltcGxlbWVudHMgT0ZWYWx1ZVR5cGU8VmxhblZpZD4gewogICAgIAogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIHNob3J0IFZBTElEQVRJT05fTUFTSyA9IDB4MEZGRjsKICAgICBmaW5hbCBzdGF0aWMgaW50IExFTkdUSCA9IDI7CkBAIC03Myw1ICs3MywxMCBAQAogICAgIHB1YmxpYyBWbGFuVmlkIHJlYWQyQnl0ZXMoQ2hhbm5lbEJ1ZmZlciBjKSB0aHJvd3MgT0ZQYXJzZUVycm9yIHsKICAgICAgICAgcmV0dXJuIFZsYW5WaWQub2YoYy5yZWFkU2hvcnQoKSk7CiAgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIFZsYW5WaWQgYXBwbHlNYXNrKFZsYW5WaWQgbWFzaykgeworICAgICAgICByZXR1cm4gVmxhblZpZC5vZigoc2hvcnQpKHRoaXMudmlkICYgbWFzay52aWQpKTsKKyAgICB9CiAgICAgCiB9CmRpZmYgLS1naXQgYS9qYXZhX2dlbi90ZW1wbGF0ZXMvb2ZfY2xhc3MuamF2YSBiL2phdmFfZ2VuL3RlbXBsYXRlcy9vZl9jbGFzcy5qYXZhCmluZGV4IDc3Mjg1OGEuLjk2NjVjNDkgMTAwNjQ0Ci0tLSBhL2phdmFfZ2VuL3RlbXBsYXRlcy9vZl9jbGFzcy5qYXZhCisrKyBiL2phdmFfZ2VuL3RlbXBsYXRlcy9vZl9jbGFzcy5qYXZhCkBAIC0xNDgsOCArMTQ4LDggQEAKICAgICAgICAgfQogICAgIH0KIAotICAgIHB1YmxpYyBpbnQgd3JpdGVUbyhDaGFubmVsQnVmZmVyIGJiKSB7Ci0gICAgICAgIHJldHVybiBXUklURVIud3JpdGUoYmIsIHRoaXMpOworICAgIHB1YmxpYyB2b2lkIHdyaXRlVG8oQ2hhbm5lbEJ1ZmZlciBiYikgeworICAgICAgICBXUklURVIud3JpdGUoYmIsIHRoaXMpOwogICAgIH0KIAogICAgIGZpbmFsIHN0YXRpYyBXcml0ZXIgV1JJVEVSID0gbmV3IFdyaXRlcigpOwpkaWZmIC0tZ2l0IGEvamF2YV9nZW4vdGVtcGxhdGVzL29mX2ludGVyZmFjZS5qYXZhIGIvamF2YV9nZW4vdGVtcGxhdGVzL29mX2ludGVyZmFjZS5qYXZhCmluZGV4IGFmNjQ5M2UuLmI5NjlkNTAgMTAwNjQ0Ci0tLSBhL2phdmFfZ2VuL3RlbXBsYXRlcy9vZl9pbnRlcmZhY2UuamF2YQorKysgYi9qYXZhX2dlbi90ZW1wbGF0ZXMvb2ZfaW50ZXJmYWNlLmphdmEKQEAgLTQwLDcgKzQwLDcgQEAKICAgICAke3Byb3AuamF2YV90eXBlLnB1YmxpY190eXBlfSBnZXQke3Byb3AudGl0bGVfbmFtZX0oKSR7ICIiIGlmIHByb3AuaXNfdW5pdmVyc2FsIGVsc2UgIiB0aHJvd3MgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24ifTsKIC8vOjogI2VuZGZvcgogCi0gICAgaW50IHdyaXRlVG8oQ2hhbm5lbEJ1ZmZlciBjaGFubmVsQnVmZmVyKTsKKyAgICB2b2lkIHdyaXRlVG8oQ2hhbm5lbEJ1ZmZlciBjaGFubmVsQnVmZmVyKTsKIAogICAgIEJ1aWxkZXIgY3JlYXRlQnVpbGRlcigpOwogICAgIHB1YmxpYyBpbnRlcmZhY2UgQnVpbGRlciAkeyJleHRlbmRzICVzLkJ1aWxkZXIiICUgbXNnLnBhcmVudF9pbnRlcmZhY2UgaWYgbXNnLnBhcmVudF9pbnRlcmZhY2UgZWxzZSAiIn0gewo=