cGFja2FnZSBjb20uaWJtLmljdS5kZXYudGVzdC5ub3JtYWxpemVyOwoKaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7CgovKioKICogSGFzaHRhYmxlIHN0b3JpbmcgaW50cyBhZGRyZXNzZWQgYnkgbG9uZ3MuIFVzZWQKICogZm9yIHN0b3Jpbmcgb2YgY29tcG9zaXRpb24gZGF0YS4gVXNlcyBKYXZhIEhhc2h0YWJsZQogKiBmb3Igbm93LgogKiBAYXV0aG9yIFZsYWRpbWlyIFdlaW5zdGVpbgogKi8KcHVibGljIGNsYXNzIExvbmdIYXNodGFibGUgewogICAgc3RhdGljIGZpbmFsIFN0cmluZyBjb3B5cmlnaHQgPSAiQ29weXJpZ2h0IKkgMjAwMiBVbmljb2RlLCBJbmMuIjsKICAgIAogICAgcHVibGljIExvbmdIYXNodGFibGUgKGludCBkZWZhdWx0VmFsdWUpIHsKICAgICAgICB0aGlzLmRlZmF1bHRWYWx1ZSA9IGRlZmF1bHRWYWx1ZTsKICAgIH0KICAgIAogICAgcHVibGljIHZvaWQgcHV0KGxvbmcga2V5LCBpbnQgdmFsdWUpIHsKICAgICAgICBpZiAodmFsdWUgPT0gZGVmYXVsdFZhbHVlKSB7CiAgICAgICAgICAgIHRhYmxlLnJlbW92ZShuZXcgTG9uZyhrZXkpKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB0YWJsZS5wdXQobmV3IExvbmcoa2V5KSwgbmV3IEludGVnZXIodmFsdWUpKTsKICAgICAgICB9CiAgICB9CiAgICAKICAgIHB1YmxpYyBpbnQgZ2V0KGxvbmcga2V5KSB7CiAgICAgICAgT2JqZWN0IHZhbHVlID0gdGFibGUuZ2V0KG5ldyBMb25nKGtleSkpOwogICAgICAgIGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm4gZGVmYXVsdFZhbHVlOwogICAgICAgIHJldHVybiAoKEludGVnZXIpdmFsdWUpLmludFZhbHVlKCk7CiAgICB9CiAgICAKICAgIHByaXZhdGUgaW50IGRlZmF1bHRWYWx1ZTsKICAgIHByaXZhdGUgSGFzaHRhYmxlIHRhYmxlID0gbmV3IEhhc2h0YWJsZSgpOwoKfQo=