ZGlmZiAtLWdpdCBhL2phdmFfZ2VuL3ByZS13cml0dGVuL3NyYy9tYWluL2phdmEvb3JnL29wZW5mbG93L3Byb3RvY29sL21hdGNoL01hdGNoLmphdmEgYi9qYXZhX2dlbi9wcmUtd3JpdHRlbi9zcmMvbWFpbi9qYXZhL29yZy9vcGVuZmxvdy9wcm90b2NvbC9tYXRjaC9NYXRjaC5qYXZhCmluZGV4IDhmMTc4NDUuLmNkYjM0ZTUgMTAwNjQ0Ci0tLSBhL2phdmFfZ2VuL3ByZS13cml0dGVuL3NyYy9tYWluL2phdmEvb3JnL29wZW5mbG93L3Byb3RvY29sL21hdGNoL01hdGNoLmphdmEKKysrIGIvamF2YV9nZW4vcHJlLXdyaXR0ZW4vc3JjL21haW4vamF2YS9vcmcvb3BlbmZsb3cvcHJvdG9jb2wvbWF0Y2gvTWF0Y2guamF2YQpAQCAtMzIsMjAgKzMyLDIwIEBACiAgKiBPbiBwcmVyZXF1aXNpdGVzOjxicj4KICAqIEZyb20gdGhlIE9GMS4xIHNwZWMsIHBhZ2UgMjgsIHRoZSBPRjEuMCBzcGVjIGZhaWxlZCB0byBleHBsaWNpdGx5IHNwZWNpZnkgdGhpcywgYnV0IGl0CiAgKiBpcyB0aGUgYmVoYXZpb3Igb2YgT0YxLjAgc3dpdGNoZXM6Ci0gKiAiUHJvdG9jb2wtc3BlY2lmaWMgZmllbGRzIHdpdGhpbiBvZnBfbWF0Y2ggd2lsbCBiZSBpZ25vcmVkIHdpdGhpbiBhIHNpbmdsZSB0YWJsZSB3aGVuIAotICogdGhlIGNvcnJlc3BvbmRpbmcgcHJvdG9jb2wgaXMgbm90IHNwZWNpZmllZCBpbiB0aGUgbWF0Y2guIFRoZSBNUExTIG1hdGNoIGZpZWxkcyB3aWxsIAotICogYmUgaWdub3JlZCB1bmxlc3MgdGhlIEV0aGVydHlwZSBpcyBzcGVjaWZpZWQgYXMgTVBMUy4gTGlrZXdpc2UsIHRoZSBJUCBoZWFkZXIgYW5kIAotICogdHJhbnNwb3J0IGhlYWRlciBmaWVsZHMgd2lsbCBiZSBpZ25vcmVkIHVubGVzcyB0aGUgRXRoZXJ0eXBlIGlzIHNwZWNpZmllZCBhcyBlaXRoZXIgCi0gKiBJUHY0IG9yIEFSUC4gVGhlIHRwX3NyYyBhbmQgdHBfZHN0IGZpZWxkcyB3aWxsIGJlIGlnbm9yZWQgdW5sZXNzIHRoZSBuZXR3b3JrIHByb3RvY29sIAotICogc3BlY2lmaWVkIGlzIGFzIFRDUCwgVURQIG9yIFNDVFAuIEZpZWxkcyB0aGF0IGFyZSBpZ25vcmVkIGRvbtV0IG5lZWQgdG8gYmUgd2lsZGNhcmRlZCAKKyAqICJQcm90b2NvbC1zcGVjaWZpYyBmaWVsZHMgd2l0aGluIG9mcF9tYXRjaCB3aWxsIGJlIGlnbm9yZWQgd2l0aGluIGEgc2luZ2xlIHRhYmxlIHdoZW4KKyAqIHRoZSBjb3JyZXNwb25kaW5nIHByb3RvY29sIGlzIG5vdCBzcGVjaWZpZWQgaW4gdGhlIG1hdGNoLiBUaGUgTVBMUyBtYXRjaCBmaWVsZHMgd2lsbAorICogYmUgaWdub3JlZCB1bmxlc3MgdGhlIEV0aGVydHlwZSBpcyBzcGVjaWZpZWQgYXMgTVBMUy4gTGlrZXdpc2UsIHRoZSBJUCBoZWFkZXIgYW5kCisgKiB0cmFuc3BvcnQgaGVhZGVyIGZpZWxkcyB3aWxsIGJlIGlnbm9yZWQgdW5sZXNzIHRoZSBFdGhlcnR5cGUgaXMgc3BlY2lmaWVkIGFzIGVpdGhlcgorICogSVB2NCBvciBBUlAuIFRoZSB0cF9zcmMgYW5kIHRwX2RzdCBmaWVsZHMgd2lsbCBiZSBpZ25vcmVkIHVubGVzcyB0aGUgbmV0d29yayBwcm90b2NvbAorICogc3BlY2lmaWVkIGlzIGFzIFRDUCwgVURQIG9yIFNDVFAuIEZpZWxkcyB0aGF0IGFyZSBpZ25vcmVkIGRvbu+/vXQgbmVlZCB0byBiZSB3aWxkY2FyZGVkCiAgKiBhbmQgc2hvdWxkIGJlIHNldCB0byAwLiIKICAqIDxicj48YnI+Ci0gKiBUaGlzIGludGVyZmFjZSB1c2VzIGdlbmVyaWNzIHRvIGFzc3VyZSB0eXBlIHNhZmV0eSBpbiB1c2VycyBjb2RlLiBIb3dldmVyLCBpbXBsZW1lbnRpbmcgY2xhc3NlcyBtYXkgaGF2ZSB0byBzdXBwcmVzcyAKKyAqIFRoaXMgaW50ZXJmYWNlIHVzZXMgZ2VuZXJpY3MgdG8gYXNzdXJlIHR5cGUgc2FmZXR5IGluIHVzZXJzIGNvZGUuIEhvd2V2ZXIsIGltcGxlbWVudGluZyBjbGFzc2VzIG1heSBoYXZlIHRvIHN1cHByZXNzCiAgKiAndW5jaGVja2VkIGNhc3QnIHdhcm5pbmdzIHdoaWxlIG1ha2luZyBzdXJlIHRoZXkgY29ycmVjdGx5IGNhc3QgYmFzZSBvbiB0aGVpciBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLgotICogCisgKgogICogQGF1dGhvciBZb3RhbSBIYXJjaG9sICh5b3RhbS5oYXJjaG9sQGJpZ3N3aXRjaC5jb20pCiAgKi8KLXB1YmxpYyBpbnRlcmZhY2UgTWF0Y2ggZXh0ZW5kcyBPRk9iamVjdCB7ICAgIAorcHVibGljIGludGVyZmFjZSBNYXRjaCBleHRlbmRzIE9GT2JqZWN0IHsKIAogICAgIC8qKgogICAgICAqIFJldHVybnMgYSB2YWx1ZSBmb3IgdGhlIGdpdmVuIGZpZWxkIGlmOgpAQCAtNTUsNyArNTUsNyBAQAogICAgICAqIDxsaT5QcmVyZXF1aXNpdGVzIGFyZSBvawogICAgICAqIDwvdWw+CiAgICAgICogSWYgb25lIG9mIHRoZSBhYm92ZSBjb25kaXRpb25zIGRvZXMgbm90IGhvbGQsIHJldHVybnMgbnVsbC4gVmFsdWUgaXMgcmV0dXJuZWQgbWFza2VkIGlmIHBhcnRpYWxseSB3aWxkY2FyZGVkLgotICAgICAqIAorICAgICAqCiAgICAgICogQHBhcmFtIGZpZWxkIE1hdGNoIGZpZWxkIHRvIHJldHJpZXZlCiAgICAgICogQHJldHVybiBWYWx1ZSBvZiBtYXRjaCBmaWVsZCAobWF5IGJlIG1hc2tlZCksIG9yIDxjb2RlPm51bGw8L2NvZGU+IGlmIGZpZWxkIGlzIG9uZSBvZiB0aGUgY29uZGl0aW9ucyBhYm92ZSBkb2VzIG5vdCBob2xkLgogICAgICAqIEB0aHJvd3MgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24gSWYgZmllbGQgaXMgbm90IHN1cHBvcnRlZC4KQEAgLTY2LDcgKzY2LDcgQEAKICAgICAgKiBSZXR1cm5zIHRoZSBtYXNrZWQgdmFsdWUgZm9yIHRoZSBnaXZlbiBmaWVsZCBmcm9tIHRoaXMgbWF0Y2gsIGFsb25nIHdpdGggdGhlIG1hc2sgaXRzZWxmLgogICAgICAqIFByZXJlcXVpc2l0ZTogZmllbGQgaXMgcGFydGlhbGx5IG1hc2tlZC4KICAgICAgKiBJZiBwcmVyZXF1aXNpdGUgaXMgbm90IG1ldCwgYSA8Y29kZT5udWxsPC9jb2RlPiBpcyByZXR1cm5lZC4KLSAgICAgKiAKKyAgICAgKgogICAgICAqIEBwYXJhbSBmaWVsZCBNYXRjaCBmaWVsZCB0byByZXRyaWV2ZS4KICAgICAgKiBAcmV0dXJuIE1hc2tlZCB2YWx1ZSBvZiBtYXRjaCBmaWVsZCBvciBudWxsIGlmIG5vIG1hc2sgaXMgc2V0LgogICAgICAqIEB0aHJvd3MgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24gSWYgZmllbGQgaXMgbm90IHN1cHBvcnRlZC4KQEAgLTc1LDcgKzc1LDcgQEAKIAogICAgIC8qKgogICAgICAqIFJldHVybnMgdHJ1ZSBpZiBhbmQgb25seSBpZiB0aGlzIG1hdGNoIG9iamVjdCBzdXBwb3J0cyB0aGUgZ2l2ZW4gbWF0Y2ggZmllbGQuCi0gICAgICogCisgICAgICoKICAgICAgKiBAcGFyYW0gZmllbGQgTWF0Y2ggZmllbGQKICAgICAgKiBAcmV0dXJuIHRydWUgaWYgZmllbGQgaXMgc3VwcG9ydGVkLCBmYWxzZSBvdGhlcndpc2UuCiAgICAgICovCkBAIC04NCw3ICs4NCw3IEBACiAgICAgLyoqCiAgICAgICogUmV0dXJucyB0cnVlIGlmIGFuZCBvbmx5IGlmIHRoaXMgbWF0Y2ggb2JqZWN0IHN1cHBvcnRzIHBhcnRpYWxseSBiaXRtYXNraW5nIG9mIHRoZSBnaXZlbiBmaWVsZC4KICAgICAgKiAobm90ZTogbm90IGFsbCBwb3NzaWJsZSB2YWx1ZXMgb2YgdGhpcyBiaXRtYXNrIGhhdmUgdG8gYmUgYWNjZXB0YWJsZSkKLSAgICAgKiAKKyAgICAgKgogICAgICAqIEBwYXJhbSBmaWVsZCBNYXRjaCBmaWVsZC4KICAgICAgKiBAcmV0dXJuIHRydWUgaWYgZmllbGQgY2FuIGJlIHBhcnRpYWxseSBtYXNrZWQsIGZhbHNlIG90aGVyd2lzZS4KICAgICAgKiBAdGhyb3dzIFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uIElmIGZpZWxkIGlzIG5vdCBzdXBwb3J0ZWQuCkBAIC05NCw3ICs5NCw3IEBACiAgICAgLyoqCiAgICAgICogUmV0dXJucyB0cnVlIGlmIGFuZCBvbmx5IGlmIHRoaXMgZmllbGQgaXMgY3VycmVudGx5IHNwZWNpZmllZCBpbiB0aGUgbWF0Y2ggd2l0aCBhbiBleGFjdCB2YWx1ZSBhbmQKICAgICAgKiBubyBtYXNrLiBJLmUuLCB0aGUgc3BlY2lmaWVkIG1hdGNoIHdpbGwgb25seSBzZWxlY3QgcGFja2V0cyB0aGF0IG1hdGNoIHRoZSBleGFjdCB2YWx1ZSBvZiBnZXRWYWx1ZShmaWVsZCkuCi0gICAgICogCisgICAgICoKICAgICAgKiBAcGFyYW0gZmllbGQgTWF0Y2ggZmllbGQuCiAgICAgICogQHJldHVybiB0cnVlIGlmIGZpZWxkIGhhcyBhIHNwZWNpZmljIGV4YWN0IHZhbHVlLCBmYWxzZSBpZiBub3QuCiAgICAgICogQHRocm93cyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbiBJZiBmaWVsZCBpcyBub3Qgc3VwcG9ydGVkLgpAQCAtMTAyLDEwICsxMDIsMTAgQEAKICAgICBwdWJsaWMgYm9vbGVhbiBpc0V4YWN0KE1hdGNoRmllbGQ8Pz4gZmllbGQpIHRocm93cyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbjsKIAogICAgIC8qKgotICAgICAqIFRydWUgaWYgYW5kIG9ubHkgaWYgdGhpcyBmaWVsZCBpcyBjdXJyZW50bHkgbG9naWNhbGx5IHVuc3BlY2lmaWVkIGluIHRoZSBtYXRjaCwgaS5lLCB0aGUgCi0gICAgICogdmFsdWUgcmV0dXJuZWQgYnkgZ2V0VmFsdWUoZikgaGFzIG5vIGltcGFjdCBvbiB3aGV0aGVyIGEgcGFja2V0IHdpbGwgYmUgc2VsZWN0ZWQgCisgICAgICogVHJ1ZSBpZiBhbmQgb25seSBpZiB0aGlzIGZpZWxkIGlzIGN1cnJlbnRseSBsb2dpY2FsbHkgdW5zcGVjaWZpZWQgaW4gdGhlIG1hdGNoLCBpLmUsIHRoZQorICAgICAqIHZhbHVlIHJldHVybmVkIGJ5IGdldFZhbHVlKGYpIGhhcyBubyBpbXBhY3Qgb24gd2hldGhlciBhIHBhY2tldCB3aWxsIGJlIHNlbGVjdGVkCiAgICAgICogYnkgdGhlIG1hdGNoIG9yIG5vdC4KLSAgICAgKiAKKyAgICAgKgogICAgICAqIEBwYXJhbSBmaWVsZCBNYXRjaCBmaWVsZC4KICAgICAgKiBAcmV0dXJuIHRydWUgaWYgZmllbGQgaXMgZnVsbHkgd2lsZGNhcmRlZCwgZmFsc2UgaWYgbm90LgogICAgICAqIEB0aHJvd3MgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24gSWYgZmllbGQgaXMgbm90IHN1cHBvcnRlZC4KQEAgLTExMywxNiArMTEzLDE2IEBACiAgICAgcHVibGljIGJvb2xlYW4gaXNGdWxseVdpbGRjYXJkZWQoTWF0Y2hGaWVsZDw/PiBmaWVsZCkgdGhyb3dzIFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uOwogCiAgICAgLyoqCi0gICAgICogVHJ1ZSBpZiBhbmQgb25seSBpZiB0aGlzIGZpZWxkIGlzIGN1cnJlbnRseSBwYXJ0aWFsbHkgc3BlY2lmaWVkIGluIHRoZSBtYXRjaCwgaS5lLCB0aGUgCisgICAgICogVHJ1ZSBpZiBhbmQgb25seSBpZiB0aGlzIGZpZWxkIGlzIGN1cnJlbnRseSBwYXJ0aWFsbHkgc3BlY2lmaWVkIGluIHRoZSBtYXRjaCwgaS5lLCB0aGUKICAgICAgKiBtYXRjaCB3aWxsIG9ubHkgc2VsZWN0IHBhY2tldHMgdGhhdCBtYXRjaCAocC52YWx1ZSAmIGdldE1hc2soZmllbGQpKSA9PSBnZXRWYWx1ZShmaWVsZCksCiAgICAgICogYW5kIGdldE1hc2soZmllbGQpICE9IDAuCi0gICAgICogCisgICAgICoKICAgICAgKiBAcGFyYW0gZmllbGQgTWF0Y2ggZmllbGQuCiAgICAgICogQHJldHVybiB0cnVlIGlmIGZpZWxkIGlzIHBhcnRpYWxseSBtYXNrZWQsIGZhbHNlIGlmIG5vdC4KICAgICAgKiBAdGhyb3dzIFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uIElmIGZpZWxkIGlzIG5vdCBzdXBwb3J0ZWQuCiAgICAgICovCiAgICAgcHVibGljIGJvb2xlYW4gaXNQYXJ0aWFsbHlNYXNrZWQoTWF0Y2hGaWVsZDw/PiBmaWVsZCkgdGhyb3dzIFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uOwotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0dXJucyBhIGJ1aWxkZXIgdG8gYnVpbGQgbmV3IGluc3RhbmNlcyBvZiB0aGlzIHR5cGUgb2YgbWF0Y2ggb2JqZWN0LgogICAgICAqIEByZXR1cm4gTWF0Y2ggYnVpbGRlcgpAQCAtMTM1LDE3ICsxMzUsMTcgQEAKICAgICAgKiBjb3JyZXNwb25kcyB0by4gVGhlIGJ1aWxkZXIgdXNlcyB0aGUgc2FtZSBub3RhdGlvbiBvZiB3aWxkY2FyZHMgYW5kIG1hc2tzLCBhbmQgY2FuIGFsc28gdGhyb3cKICAgICAgKiA8Y29kZT5VbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbjwvY29kZT4gaWYgaXQgaXMgYXNrZWQgdG8gY3JlYXRlIHNvbWUgbWF0Y2hpbmcgdGhhdCBpcyBub3Qgc3VwcG9ydGVkIGluCiAgICAgICogdGhlIHZlcnNpb24gaXQgcmVwcmVzZW50cy4KLSAgICAgKiAKKyAgICAgKgogICAgICAqIFdoaWxlIHVzZWQsIE1hdGNoQnVpbGRlciBtYXkgbm90IGJlIGNvbnNpc3RlbnQgaW4gdGVybXMgb2YgZmllbGQgcHJlcmVxdWlzaXRlcy4gSG93ZXZlciwgdXNlciBtdXN0CiAgICAgICogc29sdmUgdGhlc2UgYmVmb3JlIHVzaW5nIHRoZSBnZW5lcmF0ZWQgTWF0Y2ggb2JqZWN0IGFzIHRoZXNlIHByZXJlcXVpc2l0ZXMgc2hvdWxkIGJlIGVuZm9yY2VkIGluIHRoZQotICAgICAqIGdldHRlcnMuIAotICAgICAqIAorICAgICAqIGdldHRlcnMuCisgICAgICoKICAgICAgKiBAYXV0aG9yIFlvdGFtIEhhcmNob2wgKHlvdGFtLmhhcmNob2xAYmlnc3dpdGNoLmNvbSkKICAgICAgKi8KICAgICBpbnRlcmZhY2UgQnVpbGRlciBleHRlbmRzIE1hdGNoIHsKICAgICAgICAgLyoqCiAgICAgICAgICAqIFNldHMgYSBzcGVjaWZpYyBleGFjdCB2YWx1ZSBmb3IgYSBmaWVsZC4KLSAgICAgICAgICogCisgICAgICAgICAqCiAgICAgICAgICAqIEBwYXJhbSBmaWVsZCBNYXRjaCBmaWVsZCB0byBzZXQuCiAgICAgICAgICAqIEBwYXJhbSB2YWx1ZSBWYWx1ZSBvZiBtYXRjaCBmaWVsZC4KICAgICAgICAgICogQHJldHVybiB0aGUgQnVpbGRlciBpbnN0YW5jZSB1c2VkLgpAQCAtMTU1LDcgKzE1NSw3IEBACiAKICAgICAgICAgLyoqCiAgICAgICAgICAqIFNldHMgYSBtYXNrZWQgdmFsdWUgZm9yIGEgZmllbGQuCi0gICAgICAgICAqIAorICAgICAgICAgKgogICAgICAgICAgKiBAcGFyYW0gZmllbGQgTWF0Y2ggZmllbGQgdG8gc2V0LgogICAgICAgICAgKiBAcGFyYW0gdmFsdWUgVmFsdWUgb2YgZmllbGQuCiAgICAgICAgICAqIEBwYXJhbSBtYXNrIE1hc2sgdmFsdWUuCkBAIC0xNjYsNyArMTY2LDcgQEAKIAogICAgICAgICAvKioKICAgICAgICAgICogU2V0cyBhIG1hc2tlZCB2YWx1ZSBmb3IgYSBmaWVsZC4KLSAgICAgICAgICogCisgICAgICAgICAqCiAgICAgICAgICAqIEBwYXJhbSBmaWVsZCBNYXRjaCBmaWVsZCB0byBzZXQuCiAgICAgICAgICAqIEBwYXJhbSB2YWx1ZVdpdGhNYXNrIENvbXBvdW5kIE1hc2tlZCBvYmplY3QgY29udGFpbnMgdGhlIHZhbHVlIGFuZCB0aGUgbWFzay4KICAgICAgICAgICogQHJldHVybiB0aGUgQnVpbGRlciBpbnN0YW5jZSB1c2VkLgpAQCAtMTc2LDcgKzE3Niw3IEBACiAKICAgICAgICAgLyoqCiAgICAgICAgICAqIFVuc2V0cyBhbnkgdmFsdWUgZ2l2ZW4gZm9yIHRoZSBmaWVsZCBhbmQgd2lsZGNhcmRzIGl0IHNvIHRoYXQgaXQgbWF0Y2hlcyBhbnkgdmFsdWUuCi0gICAgICAgICAqIAorICAgICAgICAgKgogICAgICAgICAgKiBAcGFyYW0gZmllbGQgTWF0Y2ggZmllbGQgdG8gdW5zZXQuCiAgICAgICAgICAqIEByZXR1cm4gdGhlIEJ1aWxkZXIgaW5zdGFuY2UgdXNlZC4KICAgICAgICAgICogQHRocm93cyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbiBJZiBmaWVsZCBpcyBub3Qgc3VwcG9ydGVkLgpAQCAtMTg1LDkgKzE4NSw5IEBACiAKICAgICAgICAgLyoqCiAgICAgICAgICAqIFJldHVybnMgdGhlIG1hdGNoIGNyZWF0ZWQgYnkgdGhpcyBidWlsZGVyLgotICAgICAgICAgKiAKKyAgICAgICAgICoKICAgICAgICAgICogQHJldHVybiBhIE1hdGNoIG9iamVjdC4KICAgICAgICAgICovCi0gICAgICAgIHB1YmxpYyBNYXRjaCBnZXRNYXRjaCgpOworICAgICAgICBwdWJsaWMgTWF0Y2ggYnVpbGQoKTsKICAgICB9CiB9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YV9nZW4vdGVtcGxhdGVzL19maWVsZF9hY2Nlc3NvcnMuamF2YSBiL2phdmFfZ2VuL3RlbXBsYXRlcy9fZmllbGRfYWNjZXNzb3JzLmphdmEKaW5kZXggZThhZmU0Ny4uYjY0YjI5YiAxMDA2NDQKLS0tIGEvamF2YV9nZW4vdGVtcGxhdGVzL19maWVsZF9hY2Nlc3NvcnMuamF2YQorKysgYi9qYXZhX2dlbi90ZW1wbGF0ZXMvX2ZpZWxkX2FjY2Vzc29ycy5qYXZhCkBAIC0xLDYgKzEsNiBAQAogLy86OiBmb3IgcHJvcCBpbiBtc2cuaW50ZXJmYWNlLm1lbWJlcnM6CiAgICAgQE92ZXJyaWRlCi0gICAgcHVibGljICR7cHJvcC5qYXZhX3R5cGUucHVibGljX3R5cGV9IGdldCR7cHJvcC50aXRsZV9uYW1lfSgpJHsgIiIgaWYgcHJvcCBpbiBtc2cubWVtYmVycyBlbHNlICJ0aHJvd3MgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24ifSB7CisgICAgcHVibGljICR7cHJvcC5qYXZhX3R5cGUucHVibGljX3R5cGV9ICR7cHJvcC5nZXR0ZXJfbmFtZX0oKSR7ICIiIGlmIHByb3AgaW4gbXNnLm1lbWJlcnMgZWxzZSAidGhyb3dzIFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uIn0gewogLy86OiBpZiBwcm9wIGluIG1zZy5tZW1iZXJzOgogLy86OiAgICB2ZXJzaW9uX3Byb3AgPSBtc2cuZ2V0X21lbWJlcihwcm9wLm5hbWUpCiAvLzo6ICAgIGlmIHZlcnNpb25fcHJvcC5pc19maXhlZF92YWx1ZToKQEAgLTIwLDcgKzIwLDcgQEAKIAogLy86OiBpZiBnZW5lcmF0ZV9zZXR0ZXJzIGFuZCBwcm9wLmlzX3dyaXRlYWJsZToKICAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgJHttc2cuaW50ZXJmYWNlLm5hbWV9LkJ1aWxkZXIgc2V0JHtwcm9wLnRpdGxlX25hbWV9KCR7cHJvcC5qYXZhX3R5cGUucHVibGljX3R5cGV9ICR7cHJvcC5uYW1lfSkkeyAiIiBpZiBwcm9wIGluIG1zZy5tZW1iZXJzIGVsc2UgIiB0aHJvd3MgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24ifSB7CisgICAgcHVibGljICR7bXNnLmludGVyZmFjZS5uYW1lfS5CdWlsZGVyICR7cHJvcC5zZXR0ZXJfbmFtZX0oJHtwcm9wLmphdmFfdHlwZS5wdWJsaWNfdHlwZX0gJHtwcm9wLm5hbWV9KSR7ICIiIGlmIHByb3AgaW4gbXNnLm1lbWJlcnMgZWxzZSAiIHRocm93cyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbiJ9IHsKIC8vOjogaWYgcHJvcCBpbiBtc2cubWVtYmVyczoKICAgICAgICAgdGhpcy4ke3Byb3AubmFtZX0gPSAke3Byb3AubmFtZX07CiAgICAgICAgIHRoaXMuJHtwcm9wLm5hbWV9U2V0ID0gdHJ1ZTsKZGlmZiAtLWdpdCBhL2phdmFfZ2VuL3RlbXBsYXRlcy9vZl9jbGFzcy5qYXZhIGIvamF2YV9nZW4vdGVtcGxhdGVzL29mX2NsYXNzLmphdmEKaW5kZXggNDNkOTg5My4uYmNhZjk2MSAxMDA2NDQKLS0tIGEvamF2YV9nZW4vdGVtcGxhdGVzL29mX2NsYXNzLmphdmEKKysrIGIvamF2YV9nZW4vdGVtcGxhdGVzL29mX2NsYXNzLmphdmEKQEAgLTM3LDcgKzM3LDcgQEAKIAogLy86OiBpbmNsdWRlKCJfaW1wb3J0cy5qYXZhIiwgbXNnPW1zZykKIAotY2xhc3MgJHtpbXBsX2NsYXNzfSBpbXBsZW1lbnRzICR7bXNnLmludGVyZmFjZS5uYW1lfSB7CitjbGFzcyAke2ltcGxfY2xhc3N9IGltcGxlbWVudHMgJHttc2cuaW50ZXJmYWNlLmluaGVyaXRlZF9kZWNsYXJhdGlvbigpfSB7CiAgICAgLy8gdmVyc2lvbjogJHt2ZXJzaW9ufQogICAgIHByaXZhdGUgZmluYWwgc3RhdGljIGJ5dGUgV0lSRV9WRVJTSU9OID0gJHt2ZXJzaW9uLmludF92ZXJzaW9ufTsKIC8vOjogaWYgbXNnLmlzX2ZpeGVkX2xlbmd0aDoKQEAgLTU1LDIwICs1NSwyOSBAQAogICAgIHByaXZhdGUgZmluYWwgJHtwcm9wLmphdmFfdHlwZS5wdWJsaWNfdHlwZX0gJHtwcm9wLm5hbWV9OwogLy86OiAjZW5kZm9yCiAKKyAgICAvLzo6IGlmIG1zZy5kYXRhX21lbWJlcnM6CisgICAgLy8gcGFja2FnZSBwcml2YXRlIGNvbnN0cnVjdG9yIC0gdXNlZCBieSByZWFkZXJzLCBidWlsZGVycywgYW5kIGZhY3RvcnkKICAgICAke2ltcGxfY2xhc3N9KCR7CiAgICAgICAgICIsICIuam9pbigiJXMgJXMiICUocHJvcC5qYXZhX3R5cGUucHVibGljX3R5cGUsIHByb3AubmFtZSkgZm9yIHByb3AgaW4gbXNnLmRhdGFfbWVtYmVycykgfSkgewogLy86OiBmb3IgcHJvcCBpbiBtc2cuZGF0YV9tZW1iZXJzOgogICAgICAgICB0aGlzLiR7cHJvcC5uYW1lfSA9ICR7cHJvcC5uYW1lfTsKIC8vOjogI2VuZGZvcgogICAgIH0KKyAgICAvLzo6IGVsc2U6CisgICAgZmluYWwgc3RhdGljICR7aW1wbF9jbGFzc30gSU5TVEFOQ0UgPSBuZXcgJHtpbXBsX2NsYXNzfSgpOworICAgIC8vIHByaXZhdGUgZW1wdHkgY29uc3RydWN0b3IgLSB1c2Ugc2hhcmVkIGluc3RhbmNlIQorICAgIHByaXZhdGUgJHtpbXBsX2NsYXNzfSgpIHsKKyAgICB9CisgICAgLy86OiAjZW5kaWYKIAogICAgIC8vIEFjY2Vzc29ycyBmb3IgT0YgbWVzc2FnZSBmaWVsZHMKLS8vOjogaW5jbHVkZSgiX2ZpZWxkX2FjY2Vzc29ycy5qYXZhIiwgbXNnPW1zZywgZ2VuZXJhdGVfc2V0dGVycz1GYWxzZSwgYnVpbGRlcj1GYWxzZSkKKyAgICAvLzo6IGluY2x1ZGUoIl9maWVsZF9hY2Nlc3NvcnMuamF2YSIsIG1zZz1tc2csIGdlbmVyYXRlX3NldHRlcnM9RmFsc2UsIGJ1aWxkZXI9RmFsc2UpCiAKICAgICAvLzo6IGlmIG9zLnBhdGguZXhpc3RzKCIlcy9jdXN0b20vJXMuamF2YSIgJSAodGVtcGxhdGVfZGlyLCBtc2cubmFtZSkpOgogICAgIC8vOjogaW5jbHVkZSgiY3VzdG9tLyVzLmphdmEiICUgbXNnLm5hbWUsIG1zZz1tc2cpCiAgICAgLy86OiAjZW5kaWYKIAorICAgIC8vOjogaWYgbXNnLmRhdGFfbWVtYmVyczoKICAgICBwdWJsaWMgJHttc2cuaW50ZXJmYWNlLm5hbWV9LkJ1aWxkZXIgY3JlYXRlQnVpbGRlcigpIHsKICAgICAgICAgcmV0dXJuIG5ldyBCdWlsZGVyV2l0aFBhcmVudCh0aGlzKTsKICAgICB9CkBAIC04OSw3ICs5OCw3IEBACiAvLzo6IGluY2x1ZGUoIl9maWVsZF9hY2Nlc3NvcnMuamF2YSIsIG1zZz1tc2csIGdlbmVyYXRlX3NldHRlcnM9VHJ1ZSwgYnVpbGRlcj1UcnVlKQogCiAgICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgJHttc2cuaW50ZXJmYWNlLm5hbWV9IGdldE1lc3NhZ2UoKSB7CisgICAgICAgIHB1YmxpYyAke21zZy5pbnRlcmZhY2UubmFtZX0gYnVpbGQoKSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyAke2ltcGxfY2xhc3N9KAogICAgICAgICAgICAgICAgICAgICAkeyIsXG4gICAgICAgICAgICAgICAgICAgICAgIi5qb2luKAogICAgICAgICAgICAgICAgICAgICAgICAgIFsgInRoaXMuezB9U2V0ID8gdGhpcy57MH0gOiBwYXJlbnRNZXNzYWdlLnswfSIuZm9ybWF0KHByb3AubmFtZSkKQEAgLTExMiw3ICsxMjEsNyBAQAogLy86OiBpbmNsdWRlKCJfZmllbGRfYWNjZXNzb3JzLmphdmEiLCBtc2c9bXNnLCBnZW5lcmF0ZV9zZXR0ZXJzPVRydWUsIGJ1aWxkZXI9VHJ1ZSkKIC8vCiAgICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgJHttc2cuaW50ZXJmYWNlLm5hbWV9IGdldE1lc3NhZ2UoKSB7CisgICAgICAgIHB1YmxpYyAke21zZy5pbnRlcmZhY2UubmFtZX0gYnVpbGQoKSB7CiAgICAgICAgICAgICByZXR1cm4gbmV3ICR7aW1wbF9jbGFzc30oCiAgICAgICAgICAgICAgICAgJHsiLFxuICAgICAgICAgICAgICAgICAgICAgICIuam9pbigKICAgICAgICAgICAgICAgICAgICAgIFsgInRoaXMuezB9U2V0ID8gdGhpcy57MH0gOiB7MX0uezJ9Ii5mb3JtYXQocHJvcC5uYW1lLCBpbXBsX2NsYXNzLCBwcm9wLmRlZmF1bHRfbmFtZSkKQEAgLTEyNCw2ICsxMzMsMTMgQEAKICAgICAgICAgLy86OiAjZW5kaWYKIAogICAgIH0KKyAgICAvLzo6IGVsc2U6CisgICAgLy8gbm8gZGF0YSBtZW1iZXJzIC0gZG8gbm90IHN1cHBvcnQgYnVpbGRlcgorICAgIHB1YmxpYyAke21zZy5pbnRlcmZhY2UubmFtZX0uQnVpbGRlciBjcmVhdGVCdWlsZGVyKCkgeworICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oIiR7aW1wbF9jbGFzc30gaGFzIG5vIG11dGFibGUgcHJvcGVydGllcyAtLSBidWlsZGVyIHVubmVlZGVkIik7CisgICAgfQorICAgIC8vOjogI2VuZGlmCisKIAogICAgIGZpbmFsIHN0YXRpYyBSZWFkZXIgUkVBREVSID0gbmV3IFJlYWRlcigpOwogICAgIHN0YXRpYyBjbGFzcyBSZWFkZXIgaW1wbGVtZW50cyBPRk1lc3NhZ2VSZWFkZXI8JHttc2cuaW50ZXJmYWNlLm5hbWV9PiB7CkBAIC0xMzIsNyArMTQ4LDkgQEAKICAgICAgICAgICAgIGludCBzdGFydCA9IGJiLnJlYWRlckluZGV4KCk7CiAvLzo6IGZpZWxkc193aXRoX2xlbmd0aF9tZW1iZXIgPSB7fQogLy86OiBmb3IgcHJvcCBpbiBtc2cubWVtYmVyczoKLS8vOjogaWYgcHJvcC5pc19kYXRhOgorLy86OiBpZiBwcm9wLmlzX3ZpcnR1YWw6CisvLzo6ICAgIGNvbnRpbnVlCisvLzo6IGVsaWYgcHJvcC5pc19kYXRhOgogICAgICAgICAgICAgJHtwcm9wLmphdmFfdHlwZS5wdWJsaWNfdHlwZX0gJHtwcm9wLm5hbWV9ID0gJHtwcm9wLmphdmFfdHlwZS5yZWFkX29wKHZlcnNpb24sIHB1Yl90eXBlPVRydWUsCiAgICAgICAgICAgICAgICAgICAgIGxlbmd0aD1maWVsZHNfd2l0aF9sZW5ndGhfbWVtYmVyW3Byb3AuY19uYW1lXSBpZiBwcm9wLmNfbmFtZSBpbiBmaWVsZHNfd2l0aF9sZW5ndGhfbWVtYmVyIGVsc2UgTm9uZSl9OwogLy86OiBlbGlmIHByb3AuaXNfcGFkOgpAQCAtMTU5LDEwICsxNzcsMTQgQEAKICAgICAgICAgICAgIGJiLnNraXBCeXRlcygoKGxlbmd0aCArICR7bXNnLmFsaWduLTF9KS8ke21zZy5hbGlnbn0gKiAke21zZy5hbGlnbn0gKSAtIGxlbmd0aCApOwogICAgICAgICAgICAgLy86OiAjZW5kaWYKIAorICAgICAgICAgICAgLy86OiBpZiBtc2cuZGF0YV9tZW1iZXJzOgogICAgICAgICAgICAgcmV0dXJuIG5ldyAke2ltcGxfY2xhc3N9KAogICAgICAgICAgICAgICAgICAgICAkeyIsXG4gICAgICAgICAgICAgICAgICAgICAgIi5qb2luKAogICAgICAgICAgICAgICAgICAgICAgICAgIFsgcHJvcC5uYW1lIGZvciBwcm9wIGluIG1zZy5kYXRhX21lbWJlcnNdKX0KICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgIC8vOjogZWxzZToKKyAgICAgICAgICAgIHJldHVybiBJTlNUQU5DRTsKKyAgICAgICAgICAgIC8vOjogI2VuZGlmCiAgICAgICAgIH0KICAgICB9CiAKQEAgLTE4MCw3ICsyMDIsOSBAQAogLy86OiBpZiBwcm9wLmNfbmFtZSBpbiBmaWVsZHNfd2l0aF9sZW5ndGhfbWVtYmVyOgogICAgICAgICAgICAgaW50ICR7cHJvcC5uYW1lfVN0YXJ0SW5kZXggPSBiYi53cml0ZXJJbmRleCgpOwogLy86OiAjZW5kaWYKLS8vOjogaWYgcHJvcC5pc19kYXRhOgorLy86OiBpZiBwcm9wLmlzX3ZpcnR1YWw6CisvLzo6ICAgIGNvbnRpbnVlCisvLzo6IGVsaWYgcHJvcC5pc19kYXRhOgogICAgICAgICAgICAgJHtwcm9wLmphdmFfdHlwZS53cml0ZV9vcCh2ZXJzaW9uLCAibWVzc2FnZS4iICsgcHJvcC5uYW1lLCBwdWJfdHlwZT1UcnVlKX07CiAvLzo6IGVsaWYgcHJvcC5pc19wYWQ6CiAgICAgICAgICAgICAvLyBwYWQ6ICR7cHJvcC5sZW5ndGh9IGJ5dGVzCg==