From: Ben M. <ben...@gm...> - 2008-01-06 23:10:36
|
SW5kZXg6IHNyYy9nYW1lcy9zdHJhdGVneS90cmlwbGVhL2Jhc2VBSS9BSVV0aWxzLmphdmEKPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQotLS0gc3JjL2dhbWVzL3N0cmF0ZWd5L3RyaXBsZWEvYmFzZUFJL0FJVXRpbHMuamF2 YQkocmV2aXNpb24gMTk2MSkKKysrIHNyYy9nYW1lcy9zdHJhdGVneS90cmlwbGVhL2Jhc2VBSS9B SVV0aWxzLmphdmEJKHdvcmtpbmcgY29weSkKQEAgLTEwMiw1OCArMTAyLDEyNiBAQAogICAgIC8q KgogICAgICAqIEdldCBhIHF1aWNrIGFuZCBkaXJ0eSBlc3RpbWF0ZSBvZiB0aGUgc3RyZW5ndGgg b2Ygc29tZSB1bml0cyBpbiBhIGJhdHRsZS48cD4KICAgICAgKiAKKyAgICAgKiAKICAgICAgKiBA cGFyYW0gdW5pdHMgLSB0aGUgdW5pdHMgdG8gbWVhc3VyZQogICAgICAqIEBwYXJhbSBhdHRhY2tp bmcgLSBhcmUgdGhlIHVuaXRzIG9uIGF0dGFjayBvciBkZWZlbnNlCiAgICAgICogQHBhcmFtIHNl YSAtIGNhbGN1bGF0ZSB0aGUgc3RyZW5ndGggb2YgdGhlIHVuaXRzIGluIGEgc2VhIG9yIGxhbmQg YmF0dGxlPwogICAgICAqIEByZXR1cm4KICAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIGZsb2F0 IHN0cmVuZ3RoKENvbGxlY3Rpb248VW5pdD4gdW5pdHMsIGJvb2xlYW4gYXR0YWNraW5nLCBib29s ZWFuIHNlYSkKKyAgICBwdWJsaWMgc3RhdGljIGZsb2F0IHN0cmVuZ3RoKENvbGxlY3Rpb248VW5p dD4gdW5pdHMsIGJvb2xlYW4gYXR0YWNraW5nLCBib29sZWFuIHNlYSwgR2FtZURhdGEgZGF0YSkK ICAgICB7Ci0gICAgICAgIGludCBzdHJlbmd0aCA9IDA7CisgICAgCQorICAgIAkvL3VuaXQgdmFs dWUgbXVsdGlwbGllcnMgZm9yIGRlY2lkaW5nIG92ZXJhbGwgdW5pdCB2YWx1ZSBpbiBjb21iYXQK KyAgICAJLy9udW1iZXJzIGNhbiBiZSB0d2Vha2VkIGlmIEFJIGlzIHRvbyBhZ2dyZXNzaXZlIG9y IHRvbyBjYXV0aW91cyB3aXRoIGNlcnRhaW4gdW5pdCB0eXBlcy4KKyAgICAJLy9yZXN1bHRpbmcg Y29tYmF0IHZhbHVlIChyZXZpc2VkKQorICAgIAkvKgorICAgICAgICBbdW5pdF0JW10JW2NvbWJh dHZhbHVlXQorICAgICAgICBpbmZhbnRyeQlhdHRhY2sJMC4zNworICAgICAgICBpbmZhbnRyeQlk ZWZlbmNlCTEuNTMKKyAgICAgICAgYXJ0aWxsZXJ5CWF0dGFjawkxLjI3CisgICAgICAgIGFydGls bGVyeQlkZWZlbmNlCTEuMjcKKyAgICAgICAgYXJtb3IJYXR0YWNrCTIuMDAKKyAgICAgICAgYXJt b3IJZGVmZW5jZQkyLjAwCisgICAgICAgIGluZmFudHJ5IHN1cHBvcnRlZCB3aXRoIEFydGlsbGVy eQlhdHRhY2sJMS4zNworICAgICAgICAJCQorICAgICAgICBmaWdodGVyCWF0dGFjawkxLjMzCisg ICAgICAgIGZpZ2h0ZXIJZGVmZW5jZQkyLjMzCisgICAgICAgIGJvbWJlcglhdHRhY2sJMi4zMwor ICAgICAgICBib21iZXIJZGVmZW5jZQktMS4xNworICAgICAgICAJCQorICAgICAgICB0cmFuc3Bv cnQJYXR0YWNrCS0wLjk3CisgICAgICAgIHRyYW5zcG9ydAlkZWZlbmNlCTAuMjAKKyAgICAgICAg c3VibWFyaW5lCWF0dGFjawkwLjg3CisgICAgICAgIHN1Ym1hcmluZQlkZWZlbmNlCTAuODcKKyAg ICAgICAgZGVzdHJveWVyCWF0dGFjawkxLjMwCisgICAgICAgIGRlc3Ryb3llcglkZWZlbmNlCTEu MzAKKyAgICAgICAgY2FycmllcglhdHRhY2sJLTEuMTAKKyAgICAgICAgY2FycmllcglkZWZlbmNl CTEuMjMKKyAgICAgICAgYmF0dGxlc2hpcAlhdHRhY2sJMC45MworICAgICAgICBiYXR0bGVzaGlw CWRlZmVuY2UJMC45MyAKKyAgICAJIAorICAgIAkgKi8KKworICAgICAgICBmaW5hbCBkb3VibGUg YXR0YWNrTXVsdGlwbGllciAgICAgID0gNi4wMDsgLy90aGUgcHJpbWFyeSBmYWN0b3IgaW4gZGV0 ZXJtaW5pbmcgCisgICAgICAgIGZpbmFsIGRvdWJsZSBsb3N0QXR0YWNrTXVsdGlwbGllciA9IC0x LjAwOyAvL3ByZXZlbnRzIHVuaXRzIHdpdGggbG93IGF0dGFjayBhbmQgaGlnaCBkZWZlbmNlIGZy b20gYmVpbmcgdXNlZCBpbiBhdHRhY2tzIChvciB0aGUgb3Bwb3NpdGUgLSB1bml0cyB3aXRoIGhp Z2ggYXR0YWNrIGJlaW5nIHVzZWQgZm9yIGRlZmVuY2UpCisgICAgICAgIGZpbmFsIGRvdWJsZSBs b3N0Q29zdE11bHRpcGxpZXIgICA9IC0wLjEwOyAvL2NoZWFwZXIgdW5pdHMgYXJlIGJldHRlciwg YmVjYXVzZSB0aGV5IGNhbiBhYnNvcmIgYSBoaXQgZm9yIGNoZWFwZXIuCiAgICAgICAgIAorICAg ICAgICBmaW5hbCBkb3VibGUgZGllUm9sbE9wdGlvbnMgPSA2LjAwOworICAgICAgICBmaW5hbCBk b3VibGUgYXJ0aWxsZXJ5U3VwcG9ydEJlbmVmaXQgPSAxLjAwOworICAgICAgICAKKyAgICAgICAg Ly9jYWxjdWxhdGUgYm90aCBzdHJlbmd0aCBhbmQgZW5kdXJhbmNlLCBiZWNhdXNlCisgICAgICAg IC8vYSBiYWxhbmNlZCBhcm15IGdyb3VwIGlzIG1vcmUgdXNlZnVsIGluIGNvbWJhdAorICAgICAg ICBkb3VibGUgc3RyZW5ndGggPSAwOworICAgICAgICBkb3VibGUgZW5kdXJhbmNlID0gMDsKKyAg ICAgICAgCiAgICAgICAgIGZvcihVbml0IHUgOiB1bml0cykKICAgICAgICAgewotICAgICAgICAg ICAgVW5pdEF0dGFjaG1lbnQgdW5pdEF0dGF0Y2htZW50ID0gVW5pdEF0dGFjaG1lbnQuZ2V0KHUu Z2V0VHlwZSgpKTsKLSAgICAgICAgICAgIGlmKHVuaXRBdHRhdGNobWVudC5pc0FBKCkgfHwgdW5p dEF0dGF0Y2htZW50LmlzRmFjdG9yeSgpKQorICAgICAgICAJZG91YmxlIHVuaXRTdHJlbmd0aCA9 IDA7CisgICAgICAgIAkvL2RvdWJsZSB1bml0VmFsdWUgPSAwOworICAgICAgICAJCisgICAgICAg ICAgICBVbml0QXR0YWNobWVudCB0aGlzVW5pdEF0dGFjaG1lbnQgPSBVbml0QXR0YWNobWVudC5n ZXQodS5nZXRUeXBlKCkpOworICAgICAgICAgICAgaWYodGhpc1VuaXRBdHRhY2htZW50LmlzQUEo KSB8fCB0aGlzVW5pdEF0dGFjaG1lbnQuaXNGYWN0b3J5KCkpCiAgICAgICAgICAgICB7CiAgICAg ICAgICAgICAgICAgLy9ub3RoaW5nCiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlm KHVuaXRBdHRhdGNobWVudC5pc1NlYSgpID09IHNlYSkKKyAgICAgICAgICAgIGVsc2UgaWYodGhp c1VuaXRBdHRhY2htZW50LmlzU2VhKCkgPT0gc2VhKQogICAgICAgICAgICAgewotICAgICAgICAg ICAgICAgIC8vMiBwb2ludHMgc2luY2Ugd2UgY2FuIGFic29yYiBhIGhpdAotICAgICAgICAgICAg ICAgIHN0cmVuZ3RoICs9ICAyOworICAgICAgICAgICAgICAgIC8vQSBzdGFuZGFyZCB2YWx1ZSBi ZWNhdXNlIHdlIGNhbiBhYnNvcmIgYSBoaXQKKyAgICAgICAgICAgIAllbmR1cmFuY2UgKz0gMS4w OwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIC8vdHdvIGhpdAotICAgICAgICAg ICAgICAgIGlmKHVuaXRBdHRhdGNobWVudC5pc1R3b0hpdCgpKQotICAgICAgICAgICAgICAgICAg ICBzdHJlbmd0aCArPTEuNTsKKyAgICAgICAgICAgICAgICBpZih0aGlzVW5pdEF0dGFjaG1lbnQu aXNUd29IaXQoKSkKKyAgICAgICAgICAgICAgICAJZW5kdXJhbmNlICs9IDEuMDsKICAgICAgICAg ICAgICAgICAKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpbnQgY29zdCA9IGdl dENvc3QodS5nZXRUeXBlKCksdS5nZXRPd25lcigpLCBkYXRhKTsKKyAgICAgICAgICAgICAgICBp bnQgYXR0YWNrID0gdGhpc1VuaXRBdHRhY2htZW50LmdldEF0dGFjayh1LmdldE93bmVyKCkpOwor ICAgICAgICAgICAgICAgIGludCBkZWZlbmNlID0gdGhpc1VuaXRBdHRhY2htZW50LmdldERlZmVu c2UodS5nZXRPd25lcigpKTsKICAgICAgICAgICAgICAgICAvL3RoZSBudW1iZXIgb2YgcGlwcyBv biB0aGUgZGljZQogICAgICAgICAgICAgICAgIGlmKGF0dGFja2luZykKLSAgICAgICAgICAgICAg ICAgICAgc3RyZW5ndGggKz0gdW5pdEF0dGF0Y2htZW50LmdldEF0dGFjayh1LmdldE93bmVyKCkp OworICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgdW5pdFN0cmVuZ3RoICs9 IGF0dGFja011bHRpcGxpZXIgKiAoYXR0YWNrIC8gZGllUm9sbE9wdGlvbnMpOworICAgICAgICAg ICAgICAgICAgICB1bml0U3RyZW5ndGggLT0gbG9zdEF0dGFja011bHRpcGxpZXIgKiAoZGVmZW5j ZSAvIGRpZVJvbGxPcHRpb25zKTsgLy9kb24ndCB3YXN0ZSBkZWZlbnNpdmUgdW5pdHMgZm9yIGF0 dGFja2luZworICAgICAgICAgICAgICAgICAgICB1bml0U3RyZW5ndGggLT0gbG9zdENvc3RNdWx0 aXBsaWVyICogKGNvc3QpOyAgIC8vY29uc2lkZXIgdW5pdCBjb3N0LCBpLmUuIGRvbid0IHdhc3Rl IGV4cGVuc2l2ZSB1bml0cworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBlbHNl Ci0gICAgICAgICAgICAgICAgICAgIHN0cmVuZ3RoICs9IHVuaXRBdHRhdGNobWVudC5nZXREZWZl bnNlKHUuZ2V0T3duZXIoKSk7ICAgIAotICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAg IHsKKyAgICAgICAgICAgICAgICAgICAgdW5pdFN0cmVuZ3RoICs9IGF0dGFja011bHRpcGxpZXIg KiAoZGVmZW5jZSAvIGRpZVJvbGxPcHRpb25zKTsKKyAgICAgICAgICAgICAgICAgICAgdW5pdFN0 cmVuZ3RoIC09IGxvc3RBdHRhY2tNdWx0aXBsaWVyICogKGF0dGFjayAvIGRpZVJvbGxPcHRpb25z KTsgLy9kb24ndCB3YXN0ZSBvZmZlbnNpdmUgdW5pdHMgZm9yIGRlZmVuZGluZy4KKyAgICAgICAg ICAgICAgICAgICAgdW5pdFN0cmVuZ3RoIC09IGxvc3RDb3N0TXVsdGlwbGllciAqIChjb3N0KTsJ Ly9jb25zaWRlciB1bml0IGNvc3QsIGkuZS4gZG9uJ3Qgd2FzdGUgZXhwZW5zaXZlIHVuaXRzCisg ICAgICAgICAgICAgICAgfQorCiAgICAgICAgICAgICAgICAgaWYoYXR0YWNraW5nKQogICAgICAg ICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgLy9hIHVuaXQgd2l0aCBhdHRhY2sgb2Yg MCBpc250IHdvcnRoIG11Y2gKICAgICAgICAgICAgICAgICAgICAgLy93ZSBkb250IHdhbnQgdHJh bnNwb3J0cyB0byB0cnkgYW5kIGdhbmcgdXAgb24gc3VicwotICAgICAgICAgICAgICAgICAgICBp Zih1bml0QXR0YXRjaG1lbnQuZ2V0QXR0YWNrKHUuZ2V0T3duZXIoKSkgPT0gMCkKKyAgICAgICAg ICAgICAgICAgICAgaWYodGhpc1VuaXRBdHRhY2htZW50LmdldEF0dGFjayh1LmdldE93bmVyKCkp ID09IDApCiAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0 cmVuZ3RoIC09IDEuMjsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVuaXRTdHJlbmd0aCA9IDAu MDAxOwogICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIAogICAgICAg ICAgICAgICAgIH0KLSAgICAgCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgCiAg ICAgICAgICAgICB9CisgICAgICAgICAgICAvL0Rvbid0IGFsbG93IHZhbHVlcyBsZXNzIHRoYW4g MC4gVGhhdCB3b3VsZAorICAgICAgICAgICAgLy9jYXVzZSBhIHByb2JsZW0gd2l0aCB0aGUgQUkg ZGVjaWRpbmcgd2hpY2ggCisgICAgICAgICAgICAvL3RlcnJpdG9yaWVzIHRvIGF0dGFjay4gCisg ICAgICAgICAgICBpZiAodW5pdFN0cmVuZ3RoIDwgMCkKKyAgICAgICAgICAgICAgICB1bml0U3Ry ZW5ndGggPSAwLjAxOworICAgICAgICAgICAgCisgICAgICAgICAgICBzdHJlbmd0aCArPSB1bml0 U3RyZW5ndGg7IAogICAgICAgICB9CiAgICAgICAgIAorICAgICAgICAvL0FkZCBhcnRpbGxlcnkg c3VwcG9ydAogICAgICAgICBpZihhdHRhY2tpbmcpCiAgICAgICAgIHsKICAgICAgICAgICAgIGlu dCBhcnQgPSBNYXRjaC5jb3VudE1hdGNoZXModW5pdHMsIE1hdGNoZXMuVW5pdElzQXJ0aWxsZXJ5 KTsKICAgICAgICAgICAgIGludCBhcnRTdXBwb3J0ID0gTWF0Y2guY291bnRNYXRjaGVzKHVuaXRz LCBNYXRjaGVzLlVuaXRJc0FydGlsbGVyeVN1cHBvcnRhYmxlKTsKLSAgICAgICAgICAgIHN0cmVu Z3RoICs9IE1hdGgubWluKGFydCwgYXJ0U3VwcG9ydCk7CisgICAgICAgICAgICBzdHJlbmd0aCAr PSBhdHRhY2tNdWx0aXBsaWVyICogKGFydGlsbGVyeVN1cHBvcnRCZW5lZml0L2RpZVJvbGxPcHRp b25zKSAqIE1hdGgubWluKGFydCwgYXJ0U3VwcG9ydCk7CiAgICAgICAgIH0KICAgICAgICAgCi0g ICAgICAgIHJldHVybiBzdHJlbmd0aDsKKyAgICAgICAgcmV0dXJuIChmbG9hdCkoc3RyZW5ndGgg KiBlbmR1cmFuY2UpOwogICAgIH0KICAgICAKICAgICAKSW5kZXg6IHNyYy9nYW1lcy9zdHJhdGVn eS90cmlwbGVhL3dlYWtBSS9VdGlscy5qYXZhCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHNyYy9nYW1lcy9zdHJh dGVneS90cmlwbGVhL3dlYWtBSS9VdGlscy5qYXZhCShyZXZpc2lvbiAxOTYxKQorKysgc3JjL2dh bWVzL3N0cmF0ZWd5L3RyaXBsZWEvd2Vha0FJL1V0aWxzLmphdmEJKHdvcmtpbmcgY29weSkKQEAg LTEsNiArMSw3IEBACiBwYWNrYWdlIGdhbWVzLnN0cmF0ZWd5LnRyaXBsZWEud2Vha0FJOwogCiBp bXBvcnQgZ2FtZXMuc3RyYXRlZ3kuZW5naW5lLmRhdGEuKjsKK2ltcG9ydCBnYW1lcy5zdHJhdGVn eS50cmlwbGVhLlRyaXBsZUFVbml0OwogaW1wb3J0IGdhbWVzLnN0cmF0ZWd5LnRyaXBsZWEuYXR0 YXRjaG1lbnRzLio7CiBpbXBvcnQgZ2FtZXMuc3RyYXRlZ3kudHJpcGxlYS5iYXNlQUkuQUlVdGls czsKIGltcG9ydCBnYW1lcy5zdHJhdGVneS50cmlwbGVhLmRlbGVnYXRlLk1hdGNoZXM7CkBAIC0z MSw0MiArMzIsMTYwIEBACiAgICAgICAgIHJldHVybiByVmFsOwogICAgIH0KICAgICAKLSAgICBw dWJsaWMgc3RhdGljIExpc3Q8VW5pdD4gZ2V0VW5pdHNVcFRvU3RyZW5ndGgoZG91YmxlIG1heFN0 cmVuZ3RoLCBDb2xsZWN0aW9uPFVuaXQ+IHVuaXRzLCBib29sZWFuIGF0dGFja2luZywgYm9vbGVh biBzZWEpCisgICAgLyoqCisgICAgICogICBDYWxjdWxhdGUgbmVlZGVkIHVuaXRzIGJhc2VkIG9u IHN0cmVuZ3RoIGFzc3VtaW5nIHRoZXJlIHdpbGwgYmUgYW4gYXR0YWNrIGFuZCBhIGNvdW50ZXIt YXR0YWNrLgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgTGlzdDxVbml0PiBnZXRPdXJVbml0 c1VwVG9TdHJlbmd0aChkb3VibGUgbWF4U3RyZW5ndGgsIGRvdWJsZSBtYXhTdHJlbmd0aENvdW50 ZXJBdHRhY2ssIENvbGxlY3Rpb248VW5pdD4gdW5pdHMsIGJvb2xlYW4gc2VhLCBHYW1lRGF0YSBk YXRhKQogICAgIHsKLSAgICAgICAgaWYoQUlVdGlscy5zdHJlbmd0aCh1bml0cywgYXR0YWNraW5n LCBzZWEpIDwgbWF4U3RyZW5ndGgpCi0gICAgICAgICAgICByZXR1cm4gbmV3IEFycmF5TGlzdDxV bml0Pih1bml0cyk7CisgICAgICAgIGlmKG1heFN0cmVuZ3RoIDw9IDAgJiYgbWF4U3RyZW5ndGhD b3VudGVyQXR0YWNrIDw9IDApeworICAgIAkgICAgLy9ubyBhZGRpdGlvbmFsIHVuaXRzIG5lZWRl ZAorICAgIAkgICAgcmV0dXJuIG5ldyBBcnJheUxpc3Q8VW5pdD4oKTsKKyAgICAgICAgfQorICAg ICAgICBlbHNlCisgICAgCXsKKyAgICAJICAgIC8vbW9yZSB1bml0cyBuZWVkZWQKKyAgICAgICAg ICAgIGlmKEFJVXRpbHMuc3RyZW5ndGgodW5pdHMsIHRydWUsIHNlYSwgZGF0YSkgPCBtYXhTdHJl bmd0aCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEFycmF5TGlz dDxVbml0Pih1bml0cyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAg IC8vbW9yZSB1bml0cyBuZWVkZWQKKyAgICAgICAgICAgIGlmKEFJVXRpbHMuc3RyZW5ndGgodW5p dHMsIGZhbHNlLCBzZWEsIGRhdGEpIDwgbWF4U3RyZW5ndGhDb3VudGVyQXR0YWNrKQorICAgICAg ICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQXJyYXlMaXN0PFVuaXQ+KHVuaXRz KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgQXJyYXlMaXN0PFVu aXQ+IHJWYWwgPSBuZXcgQXJyYXlMaXN0PFVuaXQ+KCk7CisgICAgICAgICAgICAKKyAgICAgICAg ICAgIGZvcihVbml0IHUgOiB1bml0cykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBy VmFsLmFkZCh1KTsKKyAgICAgICAgICAgICAgICBpZihBSVV0aWxzLnN0cmVuZ3RoKHJWYWwsIHRy dWUsIHNlYSwgZGF0YSkgPiBtYXhTdHJlbmd0aCAmJgorICAgICAgICAgICAgICAgICAgICAgICAg QUlVdGlscy5zdHJlbmd0aChyVmFsLCBmYWxzZSwgc2VhLCBkYXRhKSA+IG1heFN0cmVuZ3RoQ291 bnRlckF0dGFjaykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVy biByVmFsOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKwkgICAgICAgIHJldHVy biByVmFsOworICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBBcnJheUxpc3Q8VW5pdD4gclZh bCA9IG5ldyBBcnJheUxpc3Q8VW5pdD4oKTsKICAgICAgICAgCi0gICAgICAgIGZvcihVbml0IHUg OiB1bml0cykKKyAgICB9CisgICAgCisgICAgcHVibGljIHN0YXRpYyBMaXN0PFVuaXQ+IGdldFVu aXRzVXBUb1N0cmVuZ3RoKGRvdWJsZSBtYXhTdHJlbmd0aCwgQ29sbGVjdGlvbjxVbml0PiB1bml0 cywgYm9vbGVhbiBhdHRhY2tpbmcsIGJvb2xlYW4gc2VhLCBHYW1lRGF0YSBkYXRhKQorICAgIHsK KyAgIAkKKyAgICAgICAgaWYobWF4U3RyZW5ndGggPD0gMCl7CisgICAgICAgICAgICAvL25vIGFk ZGl0aW9uYWwgdW5pdHMgbmVlZGVkCisgICAgICAgICAgICByZXR1cm4gbmV3IEFycmF5TGlzdDxV bml0PigpOworICAgICAgICB9CisgICAgICAgIGVsc2UKICAgICAgICAgewotICAgICAgICAgICAg clZhbC5hZGQodSk7Ci0gICAgICAgICAgICBpZihBSVV0aWxzLnN0cmVuZ3RoKHJWYWwsIGF0dGFj a2luZywgc2VhKSA+IG1heFN0cmVuZ3RoKQotICAgICAgICAgICAgICAgIHJldHVybiByVmFsOwor ICAgIAkgICAgLy9tb3JlIHVuaXRzIG5lZWRlZAorICAgICAgICAgICAgaWYoQUlVdGlscy5zdHJl bmd0aCh1bml0cywgYXR0YWNraW5nLCBzZWEsIGRhdGEpIDwgbWF4U3RyZW5ndGgpCisgICAgICAg ICAgICB7CisJICAgICAgICAgICAgcmV0dXJuIG5ldyBBcnJheUxpc3Q8VW5pdD4odW5pdHMpOwor CSAgICAgICAgfQorCSAgICAgICAgCisJICAgICAgICBBcnJheUxpc3Q8VW5pdD4gclZhbCA9IG5l dyBBcnJheUxpc3Q8VW5pdD4oKTsKKwkgICAgICAgIAorCSAgICAgICAgZm9yKFVuaXQgdSA6IHVu aXRzKQorCSAgICAgICAgeworCSAgICAgICAgICAgIHJWYWwuYWRkKHUpOworCSAgICAgICAgICAg IGlmKEFJVXRpbHMuc3RyZW5ndGgoclZhbCwgYXR0YWNraW5nLCBzZWEsIGRhdGEpID4gbWF4U3Ry ZW5ndGgpCisJICAgICAgICAgICAgeworCSAgICAgICAgICAgICAgICByZXR1cm4gclZhbDsKKwkg ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisJICAgICAgICByZXR1cm4gclZhbDsKICAgICAg ICAgfQotICAgICAgICAKLSAgICAgICAgcmV0dXJuIHJWYWw7Ci0gICAgICAgIAotICAgICAgICAK ICAgICB9CiAgICAgCi0KICAgICAKKyAgICAKKyAgICAvKioKKyAgICBGaW5kIHVuaXRzIHdoaWNo IGNhbiBhdHRhY2sgZnJvbSBvbmUgdGVycml0b3J5IHRvIGFub3RoZXI6ICAgIAorICAgICovCisg ICAgcHVibGljIHN0YXRpYyBMaXN0PFVuaXQ+IGdldFVuaXRzV2hpY2hDYW5BdHRhY2soTGlzdDxV bml0PiB1bml0cywgYm9vbGVhbiBjdXJyZW50VHVybkF0dGFjaywgVGVycml0b3J5IHNvdXJjZSwg VGVycml0b3J5IGRlc3RpbmF0aW9uLCBQbGF5ZXJJRCBwbGF5ZXIsIEdhbWVEYXRhIGRhdGEpCisg ICAgeworICAgICAgICBpZih1bml0cy5zaXplKCkgPT0gMCkKKyAgICAgICAgcmV0dXJuIHVuaXRz OworICAgIAkgCisgICAgICAgIExpc3Q8VW5pdD4gYXR0YWNrYWJsZSAgPSBuZXcgQXJyYXlMaXN0 PFVuaXQ+KCk7CisgICAgICAgIAorICAgICAgICBNYXRjaDxUZXJyaXRvcnk+IHJvdXRlQ29uZCA9 IG5ldyBDb21wb3NpdGVNYXRjaEFuZDxUZXJyaXRvcnk+KE1hdGNoZXMudGVycml0b3J5SGFzTm9F bmVteVVuaXRzKHBsYXllciwgZGF0YSkpOworICAgICAgICAKKyAgICAgICAgLy9UT0RPOiBuZWVk IHRvIGZpbHRlciB0aGUgcm91dGUgdG8gbWFrZSBzdXJlIGl0IGlzIHZhbGlkCisgICAgICAgIFJv dXRlIHBvdGVudGlhbEF0dGFja1JvdXRlID0gZGF0YS5nZXRNYXAoKS5nZXRSb3V0ZShzb3VyY2Us IGRlc3RpbmF0aW9uLCByb3V0ZUNvbmQpOwogCisgICAgICAgIGZvcihVbml0IHVuaXQgOiB1bml0 cykKKyAgICAgICAgeworICAgICAgICAgICAgQm9vbGVhbiB0aGlzVW5pdENhbkF0dGFjayA9IHRy dWU7CisgICAgICAgICAgICBUcmlwbGVBVW5pdCB0dW5pdCA9IChUcmlwbGVBVW5pdCl1bml0Owor ICAgICAgICAgICAgVW5pdEF0dGFjaG1lbnQgdGhpc1VuaXRBdHRhY2htZW50ID0gVW5pdEF0dGFj aG1lbnQuZ2V0KHVuaXQuZ2V0VHlwZSgpKTsKKyAgICAgICAgICAgIGludCB1bml0VHlwZU1heE1v dmVtZW50ID0gdGhpc1VuaXRBdHRhY2htZW50LmdldE1vdmVtZW50KHVuaXQuZ2V0T3duZXIoKSk7 CisKKyAgICAgICAgICAgIC8vVE9ETzogTmVlZCB0byBhY2NvdW50IGZvciBwbGFuZXMgdGhhdCBt YXkgdHJhdmVsIG92ZXIgd2F0ZXIgdG8gcmVhY2ggdGhlIGxhbmQgZGVzdGluYXRpb24KKyAgICAg ICAgICAgIGludCBkZXN0aW5hdGlvbkRpc3RhbmNlID0gZGF0YS5nZXRNYXAoKS5nZXREaXN0YW5j ZShzb3VyY2UsIGRlc3RpbmF0aW9uLCBNYXRjaGVzLlRlcnJpdG9yeUlzTGFuZCk7CisKKyAgICAg ICAgICAgIGlmKGRlc3RpbmF0aW9uRGlzdGFuY2UgPCAxKQorICAgICAgICAgICAgeworICAgICAg ICAgICAgICAgIHRoaXNVbml0Q2FuQXR0YWNrID0gZmFsc2U7CisgICAgICAgICAgICB9CisgICAg ICAgICAgICBlbHNlIGlmKGN1cnJlbnRUdXJuQXR0YWNrICYmIHR1bml0LmdldE1vdmVtZW50TGVm dCgpIDwgZGVzdGluYXRpb25EaXN0YW5jZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg ICB0aGlzVW5pdENhbkF0dGFjayA9IGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgCSAgIAll bHNlIGlmKGN1cnJlbnRUdXJuQXR0YWNrICYmIHR1bml0LmdldEFscmVhZHlNb3ZlZCgpID4gMCkK KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB0aGlzVW5pdENhbkF0dGFjayA9IGZhbHNl OworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZih1bml0VHlwZU1heE1vdmVtZW50 IDwgZGVzdGluYXRpb25EaXN0YW5jZSApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg dGhpc1VuaXRDYW5BdHRhY2sgPSBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVs c2UgaWYoIGZhbHNlICkgLy8KKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvL1RPRE86 IE1ha2Ugc3VyZSB0YW5rIHJvdXRlIGlzIG5vdCBlbmVteSBvY2N1cGllZC4KKyAgICAgICAgICAg IH0KKworICAgICAgICAgICAgaWYodGhpc1VuaXRDYW5BdHRhY2spCisgICAgICAgICAgICB7Cisg ICAgICAgICAgICAgICAgYXR0YWNrYWJsZS5hZGQodW5pdCk7CisgICAgICAgICAgICB9CisKKyAg ICAgICAgfQorICAgIAkKKyAgICAJcmV0dXJuIGF0dGFja2FibGU7CisgICAgfQorICAgICAKICAg ICAKLSAgICBwdWJsaWMgc3RhdGljIGZsb2F0IGdldFN0cmVuZ3RoT2ZQb3RlbnRpYWxBdHRhY2tl cnMoVGVycml0b3J5IGxvY2F0aW9uLCBHYW1lRGF0YSBkYXRhKQorICAgIHB1YmxpYyBzdGF0aWMg ZmxvYXQgZ2V0U3RyZW5ndGhPZlBvdGVudGlhbEF0dGFja2VycyhUZXJyaXRvcnkgbG9jYXRpb24s IFBsYXllcklEIGN1cnJlbnRQbGF5ZXIsIEdhbWVEYXRhIGRhdGEpCiAgICAgewotICAgICAgICBm bG9hdCBzdHJlbmd0aCA9IDA7Ci0gICAgICAgIGZvcihUZXJyaXRvcnkgdCA6IGRhdGEuZ2V0TWFw KCkuZ2V0TmVpZ2hib3JzKGxvY2F0aW9uLCAgbG9jYXRpb24uaXNXYXRlcigpID8gTWF0Y2hlcy5U ZXJyaXRvcnlJc1dhdGVyIDogIE1hdGNoZXMuVGVycml0b3J5SXNMYW5kKSkKKyAgICAgICAgQ29s bGVjdGlvbjxVbml0PiBhbGxWYWxpZFVuaXRzID0gZ2V0UG90ZW50aWFsQXR0YWNrZXJzKGxvY2F0 aW9uLCBjdXJyZW50UGxheWVyLCBkYXRhKTsgICAgCQorICAgICAgICByZXR1cm4gQUlVdGlscy5z dHJlbmd0aChhbGxWYWxpZFVuaXRzLCB0cnVlLCBsb2NhdGlvbi5pc1dhdGVyKCksIGRhdGEpOwor ICAgIH0KKyAgICAKKyAgICBwdWJsaWMgc3RhdGljIENvbGxlY3Rpb248VW5pdD4gZ2V0UG90ZW50 aWFsQXR0YWNrZXJzKFRlcnJpdG9yeSBsb2NhdGlvbiwgUGxheWVySUQgY3VycmVudFBsYXllciwg R2FtZURhdGEgZGF0YSkKKyAgICB7CisgICAgICAgIENvbGxlY3Rpb248VW5pdD4gYWxsVmFsaWRV bml0cyA9IG5ldyBIYXNoU2V0PFVuaXQ+KCk7CisgICAgICAgIAorICAgICAgICBmb3IoVGVycml0 b3J5IHQgOiBkYXRhLmdldE1hcCgpLmdldE5laWdoYm9ycyhsb2NhdGlvbiwgIGxvY2F0aW9uLmlz V2F0ZXIoKSA/IE1hdGNoZXMuVGVycml0b3J5SXNXYXRlciA6ICBNYXRjaGVzLlRlcnJpdG9yeUlz TGFuZCwgMikpCiAgICAgICAgIHsKLSAgICAgICAgICAgIExpc3Q8VW5pdD4gZW5lbWllcyA9IHQu Z2V0VW5pdHMoKS5nZXRNYXRjaGVzKE1hdGNoZXMuZW5lbXlVbml0KGxvY2F0aW9uLmdldE93bmVy KCksIGRhdGEpKTsKLSAgICAgICAgICAgIHN0cmVuZ3RoKz0gQUlVdGlscy5zdHJlbmd0aChlbmVt aWVzLCB0cnVlLCBsb2NhdGlvbi5pc1dhdGVyKCkpOworICAgICAgICAgICAgLy9nZXQgbGlzdCBv ZiBlbmVteSB1bml0cyBpbiB0aGF0IHRlcnJpdG9yeSAobm90ZSB0aGF0IHRlcnJpdG9yeSBjb3Vs ZCBiZSAyIHpvbmVzIGF3YXkgCisgICAgICAgICAgICBMaXN0PFVuaXQ+IGVuZW1pZXMgPSB0Lmdl dFVuaXRzKCkuZ2V0TWF0Y2hlcyhNYXRjaGVzLmVuZW15VW5pdChjdXJyZW50UGxheWVyLCBkYXRh KSk7CiAgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vZmlsdGVyIGVuZW15IHVuaXRzIGJ5IGlm IHRoZXkgY2FuIHJlYWNoIGl0LgorICAgICAgICAgICAgZW5lbWllcyA9IGdldFVuaXRzV2hpY2hD YW5BdHRhY2soZW5lbWllcywgZmFsc2UsIHQsIGxvY2F0aW9uLCBjdXJyZW50UGxheWVyLCBkYXRh KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgYWxsVmFsaWRVbml0cy5hZGRBbGwoZW5lbWll cyk7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHN0cmVuZ3RoOworICAgICAgICAKKyAgICAg ICAgcmV0dXJuIGFsbFZhbGlkVW5pdHM7CiAgICAgfQogICAgIAogICAgIAorICAgIAogICAgIHB1 YmxpYyBzdGF0aWMgUm91dGUgZmluZE5lYXJlc3QoVGVycml0b3J5IHN0YXJ0LCBNYXRjaDxUZXJy aXRvcnk+IGVuZENvbmRpdGlvbiwgTWF0Y2g8VGVycml0b3J5PiByb3V0ZUNvbmRpdGlvbiwgR2Ft ZURhdGEgZGF0YSkKICAgICB7CiAgICAgICAgIFJvdXRlIHNob3J0ZXN0Um91dGUgPSBudWxsOwpJ bmRleDogc3JjL2dhbWVzL3N0cmF0ZWd5L3RyaXBsZWEvd2Vha0FJL1dlYWtBSS5qYXZhCj09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT0KLS0tIHNyYy9nYW1lcy9zdHJhdGVneS90cmlwbGVhL3dlYWtBSS9XZWFrQUkuamF2YQko cmV2aXNpb24gMTk2MSkKKysrIHNyYy9nYW1lcy9zdHJhdGVneS90cmlwbGVhL3dlYWtBSS9XZWFr QUkuamF2YQkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogCiBpbXBvcnQgamF2YS51 dGlsLio7CiBpbXBvcnQgamF2YS51dGlsLmxvZ2dpbmcuTG9nZ2VyOworaW1wb3J0IGphdmEudGV4 dC5EZWNpbWFsRm9ybWF0OwogCiAKIApAQCAtNDMsNyArNDQsNyBAQAogcHVibGljIGNsYXNzIFdl YWtBSSBleHRlbmRzIEFic3RyYWN0QUkgaW1wbGVtZW50cyBJR2FtZVBsYXllciwgSVRyaXBsZWFQ bGF5ZXIKIHsKICAgICBwcml2YXRlIGZpbmFsIHN0YXRpYyBMb2dnZXIgc19sb2dnZXIgPSBMb2dn ZXIuZ2V0TG9nZ2VyKFdlYWtBSS5jbGFzcy5nZXROYW1lKCkpOwotCisgICAgZmluYWwgc3RhdGlj IERlY2ltYWxGb3JtYXQgc3RyZW5ndGhGb3JtYXQgPSBuZXcgRGVjaW1hbEZvcm1hdCgiMC4wMCIp OwogICAgIAogCiAKQEAgLTMyOCwzOCArMzI5LDM4IEBACiAgICAgcHJpdmF0ZSB2b2lkIG1vdmVD b21iYXRTZWEoIGZpbmFsIEdhbWVEYXRhIGRhdGEsIExpc3Q8Q29sbGVjdGlvbjxVbml0Pj4gbW92 ZVVuaXRzLCBMaXN0PFJvdXRlPiBtb3ZlUm91dGVzLCBQbGF5ZXJJRCBwbGF5ZXIsIFJvdXRlIGFt cGhpYlJvdXRlLCBpbnQgbWF4VHJhbnMpCiAgICAgewogICAgIAkvLyBUT0RPIHdvcmthcm91bmQg LSBzaG91bGQgY2hlY2sgaWYgYW1waGliUm91dGUgaXMgaW4gbW92ZVJvdXRlcwotCQlpZiAobW92 ZVJvdXRlcy5zaXplKCkgPT0gMikgewotCQkJbW92ZVJvdXRlcy5yZW1vdmUoMSk7Ci0JCQltb3Zl VW5pdHMucmVtb3ZlKDEpOwotCQl9Ci0JCVRlcnJpdG9yeSBmaXJzdFNlYVpvbmVPbkFtcGhpYiA9 IG51bGw7Ci0JCVRlcnJpdG9yeSBsYXN0U2VhWm9uZU9uQW1waGliID0gbnVsbDsKLQkJaWYgKGFt cGhpYlJvdXRlICE9IG51bGwpIHsKLQkJCWZpcnN0U2VhWm9uZU9uQW1waGliID0gYW1waGliUm91 dGUuZ2V0VGVycml0b3JpZXMoKS5nZXQoMCk7Ci0JCQlsYXN0U2VhWm9uZU9uQW1waGliID0gYW1w aGliUm91dGUuZ2V0VGVycml0b3JpZXMoKS5nZXQoCi0JCQkJCWFtcGhpYlJvdXRlLmdldExlbmd0 aCgpIC0gMSk7Ci0JCX0KKyAgICAgICAgaWYgKG1vdmVSb3V0ZXMuc2l6ZSgpID09IDIpIHsKKyAg ICAgICAgICAgIG1vdmVSb3V0ZXMucmVtb3ZlKDEpOworICAgICAgICAgICAgbW92ZVVuaXRzLnJl bW92ZSgxKTsKKyAgICAgICAgfQorICAgICAgICBUZXJyaXRvcnkgZmlyc3RTZWFab25lT25BbXBo aWIgPSBudWxsOworICAgICAgICBUZXJyaXRvcnkgbGFzdFNlYVpvbmVPbkFtcGhpYiA9IG51bGw7 CisgICAgICAgIGlmIChhbXBoaWJSb3V0ZSAhPSBudWxsKSB7CisgICAgICAgICAgICBmaXJzdFNl YVpvbmVPbkFtcGhpYiA9IGFtcGhpYlJvdXRlLmdldFRlcnJpdG9yaWVzKCkuZ2V0KDApOworICAg ICAgICAgICAgbGFzdFNlYVpvbmVPbkFtcGhpYiA9IGFtcGhpYlJvdXRlLmdldFRlcnJpdG9yaWVz KCkuZ2V0KAorICAgICAgICAgICAgICAgICAgICBhbXBoaWJSb3V0ZS5nZXRMZW5ndGgoKSAtIDEp OworICAgICAgICB9CiAKLQkJTWF0Y2g8VW5pdD4gb3duZWRBbmROb3RNb3ZlZCA9IG5ldyBDb21w b3NpdGVNYXRjaEFuZDxVbml0PihNYXRjaGVzCi0JCQkJLnVuaXRJc093bmVkQnkocGxheWVyKSwg SGFzbnRNb3ZlZCwgVHJhbnNwb3J0aW5nKTsKLQkJTGlzdDxVbml0PiB1bml0c1RvTW92ZSA9IG5l dyBBcnJheUxpc3Q8VW5pdD4oKTsKLQkJTGlzdDxVbml0PiB0cmFuc3BvcnRzID0gZmlyc3RTZWFa b25lT25BbXBoaWIuZ2V0VW5pdHMoKS5nZXRNYXRjaGVzKAotCQkJCW93bmVkQW5kTm90TW92ZWQp OwotCQkKLQkJaWYodHJhbnNwb3J0cy5zaXplKCkgPD0gbWF4VHJhbnMpIAotCQl7Ci0JCSAgICB1 bml0c1RvTW92ZS5hZGRBbGwodHJhbnNwb3J0cyk7Ci0JCX0gZWxzZSB7Ci0JCSAgICB1bml0c1Rv TW92ZS5hZGRBbGwodHJhbnNwb3J0cy5zdWJMaXN0KDAsIG1heFRyYW5zKSk7Ci0JCX0KLQkJCi0J CUxpc3Q8VW5pdD4gbGFuZFVuaXRzID0gbG9hZDJUcmFuc3BvcnRzKHRydWUsIGRhdGEsIHVuaXRz VG9Nb3ZlLAotCQkJCWZpcnN0U2VhWm9uZU9uQW1waGliLCBwbGF5ZXIpOwotCQlSb3V0ZSByID0g Z2V0TWF4U2VhUm91dGUoZGF0YSwgZmlyc3RTZWFab25lT25BbXBoaWIsCi0JCQkJbGFzdFNlYVpv bmVPbkFtcGhpYiwgcGxheWVyKTsKLQkJbW92ZVJvdXRlcy5hZGQocik7Ci0JCXVuaXRzVG9Nb3Zl LmFkZEFsbChsYW5kVW5pdHMpOwotCQltb3ZlVW5pdHMuYWRkKHVuaXRzVG9Nb3ZlKTsKKyAgICAg ICAgTWF0Y2g8VW5pdD4gb3duZWRBbmROb3RNb3ZlZCA9IG5ldyBDb21wb3NpdGVNYXRjaEFuZDxV bml0PihNYXRjaGVzCisgICAgICAgICAgICAgICAgLnVuaXRJc093bmVkQnkocGxheWVyKSwgSGFz bnRNb3ZlZCwgVHJhbnNwb3J0aW5nKTsKKyAgICAgICAgTGlzdDxVbml0PiB1bml0c1RvTW92ZSA9 IG5ldyBBcnJheUxpc3Q8VW5pdD4oKTsKKyAgICAgICAgTGlzdDxVbml0PiB0cmFuc3BvcnRzID0g Zmlyc3RTZWFab25lT25BbXBoaWIuZ2V0VW5pdHMoKS5nZXRNYXRjaGVzKAorICAgICAgICAgICAg ICAgIG93bmVkQW5kTm90TW92ZWQpOworCisgICAgICAgIGlmKHRyYW5zcG9ydHMuc2l6ZSgpIDw9 IG1heFRyYW5zKSAKKyAgICAgICAgeworICAgICAgICAgICAgdW5pdHNUb01vdmUuYWRkQWxsKHRy YW5zcG9ydHMpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdW5pdHNUb01vdmUuYWRk QWxsKHRyYW5zcG9ydHMuc3ViTGlzdCgwLCBtYXhUcmFucykpOworICAgICAgICB9CisKKyAgICAg ICAgTGlzdDxVbml0PiBsYW5kVW5pdHMgPSBsb2FkMlRyYW5zcG9ydHModHJ1ZSwgZGF0YSwgdW5p dHNUb01vdmUsCisgICAgICAgICAgICAgICAgZmlyc3RTZWFab25lT25BbXBoaWIsIHBsYXllcik7 CisgICAgICAgIFJvdXRlIHIgPSBnZXRNYXhTZWFSb3V0ZShkYXRhLCBmaXJzdFNlYVpvbmVPbkFt cGhpYiwKKyAgICAgICAgICAgICAgICBsYXN0U2VhWm9uZU9uQW1waGliLCBwbGF5ZXIpOworICAg ICAgICBtb3ZlUm91dGVzLmFkZChyKTsKKyAgICAgICAgdW5pdHNUb01vdmUuYWRkQWxsKGxhbmRV bml0cyk7CisgICAgICAgIG1vdmVVbml0cy5hZGQodW5pdHNUb01vdmUpOwogICAgIH0KICAKICAg ICAJCkBAIC01MDMsNyArNTA0LDcgQEAKICAgCiAgICAgICAgICAgICBUZXJyaXRvcnkgZW5lbXkg PSB0OwogICAgICAgICAgICAgCi0gICAgICAgICAgICBmbG9hdCBlbmVteVN0cmVuZ3RoID0gQUlV dGlscy5zdHJlbmd0aChlbmVteS5nZXRVbml0cygpLmdldFVuaXRzKCksIGZhbHNlLCB0cnVlKTsK KyAgICAgICAgICAgIGZsb2F0IGVuZW15U3RyZW5ndGggPSBBSVV0aWxzLnN0cmVuZ3RoKGVuZW15 LmdldFVuaXRzKCkuZ2V0VW5pdHMoKSwgZmFsc2UsIHRydWUsIGRhdGEpOwogICAgICAgICAgICAg aWYoZW5lbXlTdHJlbmd0aCA+IDApCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgQ29t cG9zaXRlTWF0Y2g8VW5pdD4gYXR0YWNrYWJsZSA9IG5ldyBDb21wb3NpdGVNYXRjaEFuZDxVbml0 PigKQEAgLTUxNiwxMiArNTE3LDE4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQog ICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAg ICAgICAgICAgICAgICAvL1RPRE86IFRlc3QgdGhhdCB1bml0cyBoYXZlIGVub3VnaCBtb3ZlbWVu dC4gaS5lLiBkb24ndCBhc3N1bWUgYWxsIHNlYSB1bml0cyBoYXZlIGJhc2UgbW92ZW1lbnQgb2Yg MgogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIFNldDxUZXJyaXRvcnk+IGRvbnRN b3ZlRnJvbSA9IG5ldyBIYXNoU2V0PFRlcnJpdG9yeT4oKTsKICAgICAgICAgICAgICAgICAKICAg ICAgICAgICAgICAgICAvL2ZpbmQgb3VyIHN0cmVuZ3RoIHRoYXQgd2UgY2FuIGF0dGFjayB3aXRo CiAgICAgICAgICAgICAgICAgaW50IG91clN0cmVuZ3RoID0gMDsKLSAgICAgICAgICAgICAgICBD b2xsZWN0aW9uPFRlcnJpdG9yeT4gYXR0YWNrRnJvbSA9IGRhdGEuZ2V0TWFwKCkuZ2V0TmVpZ2hi b3JzKGVuZW15LCBNYXRjaGVzLlRlcnJpdG9yeUlzV2F0ZXIpOyAKKyAgICAgICAgICAgICAgICAK KworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8vVE9ETzogbW9zdCBzZWEgdW5p dHMgY2FuIG1vdmUgMiBzcXVhcmVzIChkZXBlbmRpbmcgb24gd2hpY2ggZ2FtZSB2YXJpYW50KS4g VGhpcyBuZWVkcyB0byBiZSBnZW5lcmFsaXplZCwgYnV0IGZvciBub3cgbGV0cyB0cnkgdGhpcy4K KyAgICAgICAgICAgICAgICAvL2FsbG93IGFpcmNyYWZ0IHRvIGF0dGFjayBzZWEKKyAgICAgICAg ICAgICAgICBDb2xsZWN0aW9uPFRlcnJpdG9yeT4gYXR0YWNrRnJvbSA9IGRhdGEuZ2V0TWFwKCku Z2V0TmVpZ2hib3JzKGVuZW15LCAyKTsKICAgICAgICAgICAgICAgICBmb3IoVGVycml0b3J5IG93 bmVkIDogYXR0YWNrRnJvbSApCiAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAg IC8vZG9udCByaXNrIHVuaXRzIHdlIGFyZSBjYXJyeWluZwpAQCAtNTMxLDExICs1MzgsMTEgQEAK ICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgfQog ICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICBvdXJTdHJlbmd0aCArPSBB SVV0aWxzLnN0cmVuZ3RoKG93bmVkLmdldFVuaXRzKCkuZ2V0TWF0Y2hlcyhhdHRhY2thYmxlKSwg dHJ1ZSwgdHJ1ZSk7CisgICAgICAgICAgICAgICAgICAgb3VyU3RyZW5ndGggKz0gQUlVdGlscy5z dHJlbmd0aChvd25lZC5nZXRVbml0cygpLmdldE1hdGNoZXMoYXR0YWNrYWJsZSksIHRydWUsIHRy dWUsIGRhdGEpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKICAgICAgICAg ICAgICAgICAKLSAgICAgICAgICAgICAgICBpZihvdXJTdHJlbmd0aCA+IDEuMzIgKiBlbmVteVN0 cmVuZ3RoKQorICAgICAgICAgICAgICAgIGlmKG91clN0cmVuZ3RoID4gMS4yMCAqIGVuZW15U3Ry ZW5ndGgpCiAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICBzX2xvZ2dlci5m aW5lKCJBdHRhY2tpbmcgOiAiICsgZW5lbXkgKyAiIG91ciBzdHJlbmd0aDoiICsgb3VyU3RyZW5n dGggKyAiIGVuZW15IHN0cmVuZ3RoIiArIGVuZW15U3RyZW5ndGggKTsKICAgICAgICAgICAgICAg ICAgICAgCkBAIC02MDAsOCArNjA3LDggQEAKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAg ICAvL2lmIHRoZXkgYXJlIGEgdGhyZWF0IHRvIHRha2Ugb3VyIGNhcGl0b2wsIGRvbnQgbW92ZQog ICAgICAgICAgICAgICAgIC8vY29tcGFyZSB0aGUgc3RyZW5ndGggb2YgdW5pdHMgd2UgY2FuIHBs YWNlCi0gICAgICAgICAgICAgICAgZmxvYXQgb3VyU3RyZW5ndGggPSBBSVV0aWxzLnN0cmVuZ3Ro KHBsYXllci5nZXRVbml0cygpLmdldFVuaXRzKCksIGZhbHNlLCBmYWxzZSk7Ci0gICAgICAgICAg ICAgICAgZmxvYXQgYXR0YWNrZXJTdHJlbmd0aCA9IFV0aWxzLmdldFN0cmVuZ3RoT2ZQb3RlbnRp YWxBdHRhY2tlcnMoIHQsIGRhdGEgKTsKKyAgICAgICAgICAgICAgICBmbG9hdCBvdXJTdHJlbmd0 aCA9IEFJVXRpbHMuc3RyZW5ndGgocGxheWVyLmdldFVuaXRzKCkuZ2V0VW5pdHMoKSwgZmFsc2Us IGZhbHNlLCBkYXRhKTsKKyAgICAgICAgICAgICAgICBmbG9hdCBhdHRhY2tlclN0cmVuZ3RoID0g VXRpbHMuZ2V0U3RyZW5ndGhPZlBvdGVudGlhbEF0dGFja2VycyggdCwgcGxheWVyLCBkYXRhICk7 CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgaWYoYXR0YWNrZXJTdHJlbmd0aCA+ IG91clN0cmVuZ3RoKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTc0MSw3ICs3 NDgsOCBAQAogCiAgICAgcHJpdmF0ZSB2b2lkIHBvcHVsYXRlQ29tYmF0TW92ZShHYW1lRGF0YSBk YXRhLCBMaXN0PENvbGxlY3Rpb248VW5pdD4+IG1vdmVVbml0cywgTGlzdDxSb3V0ZT4gbW92ZVJv dXRlcywgUGxheWVySUQgcGxheWVyKQogICAgIHsKLSAgICAgICAgcG9wdWxhdGVCb21iZXJDb21i YXQoZGF0YSwgbW92ZVVuaXRzLCBtb3ZlUm91dGVzLCBwbGF5ZXIpOworIAorCiAgICAgICAgIAog ICAgICAgICBmaW5hbCBDb2xsZWN0aW9uPFVuaXQ+IHVuaXRzQWxyZWFkeU1vdmVkID0gbmV3IEhh c2hTZXQ8VW5pdD4oKTsKICAgICAgICAgLy9maW5kIHRoZSB0ZXJyaXRvcmllcyB3ZSBjYW4ganVz dCB3YWxrIGludG8KQEAgLTc3OCw2ICs3ODYsOCBAQAogICAgICAgICAgICAgICAgIGlmKCFmYWN0 b3J5SW5UMSAmJiBmYWN0b3J5SW5UMikKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDE7IC8v LTE7CiAKKyAgICAgICAgICAgICAgICAvL1RPRE86IG5leHQgdGFrZSB1bml0cyB3aXRoIGhpZ2hl ciBJUEMgdmFsdWU/CisgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgLy9yYW5kb21u ZXNzIGlzIGEgYmV0dGVyIGd1aWRlIHRoYW4gYW55IG90aGVyIG1ldHJpYwogICAgICAgICAgICAg ICAgIC8vc29ydCB0aGUgcmVtYWluaW5nIHJhbmRvbWx5CiAgICAgICAgICAgICAgICAgaWYoIXJh bmRvbUludHMuY29udGFpbnNLZXkobzEpKQpAQCAtNzk0LDcgKzgwNCw3IEBACiAgICAgICAgIC8v Zmlyc3QgZmluZCB0aGUgdGVycml0b3JpZXMgd2UgY2FuIGp1c3Qgd2FsayBpbnRvCiAgICAgICAg IGZvcihUZXJyaXRvcnkgZW5lbXkgOiBlbmVteU93bmVkKQogICAgICAgICB7Ci0gICAgICAgICAg ICBpZihBSVV0aWxzLnN0cmVuZ3RoKGVuZW15LmdldFVuaXRzKCkuZ2V0VW5pdHMoKSwgdHJ1ZSwg ZmFsc2UpID09IDApCisgICAgICAgICAgICBpZihBSVV0aWxzLnN0cmVuZ3RoKGVuZW15LmdldFVu aXRzKCkuZ2V0VW5pdHMoKSwgdHJ1ZSwgZmFsc2UsIGRhdGEpID09IDApCiAgICAgICAgICAgICB7 CiAgICAgICAgICAgICAgICAgLy9vbmx5IHRha2UgaXQgd2l0aCAxIHVuaXQKICAgICAgICAgICAg ICAgICBib29sZWFuIHRha2VuID0gZmFsc2U7CkBAIC04MzcsMTYgKzg0NywxOSBAQAogICAgICAg ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQorICAgICAg ICAgICAgCisgICAgICAgICAgICAvL3N0cmF0ZWdpYyBib21iIGxhc3QKKyAgICAgICAgICAgIHBv cHVsYXRlQm9tYmVyQ29tYmF0KGRhdGEsIG1vdmVVbml0cywgbW92ZVJvdXRlcywgcGxheWVyKTsK KyAgICAgICAgICAgIAogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICAKICAgICAgICAgCi0g ICAgICAgIAogICAgICAgICAvL2ZpbmQgdGhlIHRlcnJpdG9yaWVzIHdlIGNhbiByZWFzb25hYmx5 IGV4cGVjdCB0byB0YWtlCiAgICAgICAgIGZvcihUZXJyaXRvcnkgZW5lbXkgOiBlbmVteU93bmVk KQogICAgICAgICB7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGZsb2F0IGVuZW15U3RyZW5n dGggPSBBSVV0aWxzLnN0cmVuZ3RoKGVuZW15LmdldFVuaXRzKCkuZ2V0VW5pdHMoKSwgZmFsc2Us IGZhbHNlKTsKKyAgICAgICAgICAgIGZsb2F0IGVuZW15U3RyZW5ndGggPSBBSVV0aWxzLnN0cmVu Z3RoKGVuZW15LmdldFVuaXRzKCkuZ2V0VW5pdHMoKSwgZmFsc2UsIGZhbHNlLCBkYXRhKTsKICAg ICAgICAgICAgIGlmKGVuZW15U3RyZW5ndGggPiAwKQogICAgICAgICAgICAgewogICAgICAgICAg ICAgICAgIENvbXBvc2l0ZU1hdGNoPFVuaXQ+IGF0dGFja2FibGUgPSBuZXcgQ29tcG9zaXRlTWF0 Y2hBbmQ8VW5pdD4oCkBAIC04NjUsNjAgKzg3OCwxNzIgQEAKICAgICAgICAgICAgICAgICBhdHRh Y2thYmxlLmFkZChNYXRjaGVzLlVuaXRJc05vdEZhY3RvcnkpOwogICAgICAgICAgICAgICAgIGF0 dGFja2FibGUuYWRkKE1hdGNoZXMuVW5pdElzTm90U2VhKTsKICAgICAgICAgICAgICAgICAKKwor ICAgICAgICAgICAgICAgIGZpbmFsIENvbGxlY3Rpb248VW5pdD4gYWxsVW5pdHNXaGljaENhbkF0 dGFjayA9IG5ldyBIYXNoU2V0PFVuaXQ+KCk7CisgICAgICAgICAgICAgICAgCiAgICAgICAgICAg ICAgICAgU2V0PFRlcnJpdG9yeT4gZG9udE1vdmVGcm9tID0gbmV3IEhhc2hTZXQ8VGVycml0b3J5 PigpOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIC8vZmluZCBvdXIgc3RyZW5n dGggdGhhdCB3ZSBjYW4gYXR0YWNrIHdpdGgKLSAgICAgICAgICAgICAgICBpbnQgb3VyU3RyZW5n dGggPSAwOwotICAgICAgICAgICAgICAgIENvbGxlY3Rpb248VGVycml0b3J5PiBhdHRhY2tGcm9t ID0gZGF0YS5nZXRNYXAoKS5nZXROZWlnaGJvcnMoZW5lbXksIE1hdGNoZXMudGVycml0b3J5SGFz TGFuZFVuaXRzT3duZWRCeShwbGF5ZXIpKTsgCisgICAgICAgICAgICAgICAgZG91YmxlIG91clN0 cmVuZ3RoID0gMDsKKyAgICAgICAgICAgICAgICAKKy8vICAgICAgICAgICAgICBUT0RPOiBBbHNv IGxvb2sgZm9yIGFpcmNyYWZ0IG9uIGxhbmQgb3Igc2VhIHRlcnJpdG9yaWVzCisgICAgICAgICAg ICAgICAgLy9UT0RPOiBsb29rIE4tem9uZXMgZGVlcCAoYmFzZWQgb24gY29uZmlnIFhNTCkgZm9y IAorICAgICAgICAgICAgICAgIC8vYm9tYmVycyBhbmQgYW55IG90aGVyIGZhc3QgdW5pdHMuIGFu ZCBXaGF0IGlmIGxvbmctcmFuZ2UgCisgICAgICAgICAgICAgICAgLy9haXJjcmFmdCwgb3Igb3Ro ZXIgY29uZmlnIGRhdGEgaXMgY2hhbmdlZCB0byBpbmNyZWFzZSByYW5nZS4KKyAgICAgICAgICAg ICAgICBDb2xsZWN0aW9uPFRlcnJpdG9yeT4gYXR0YWNrRnJvbSA9IGRhdGEuZ2V0TWFwKCkuZ2V0 TmVpZ2hib3JzKGVuZW15LCBNYXRjaGVzLnRlcnJpdG9yeUhhc0xhbmRVbml0c093bmVkQnkocGxh eWVyKSwgMyk7IAorICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGZvcihUZXJyaXRv cnkgb3duZWQgOiBhdHRhY2tGcm9tICkKICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg ICAgICAgIAorICAgICAgICAgICAgICAgICAgIGZpbmFsIENvbGxlY3Rpb248VW5pdD4gYWxsVW5p dHNXaGljaENhbkF0dGFja0Zyb21UaGlzVGVycml0b3J5ID0gbmV3IEhhc2hTZXQ8VW5pdD4oKTsK KworICAgICAgICAgICAgICAgICAgIGZpbmFsIGRvdWJsZSBwb3RlbnRpYWxFbmVteUF0dGFja1N0 cmVuZ3RoID0gVXRpbHMuZ2V0U3RyZW5ndGhPZlBvdGVudGlhbEF0dGFja2Vycyhvd25lZCwgcGxh eWVyLCBnZXRQbGF5ZXJCcmlkZ2UoKS5nZXRHYW1lRGF0YSgpKTsKKyAgICAgICAgICAgICAgICAg ICBmaW5hbCBkb3VibGUgb3VyRGVmZW5jZVN0cmVuZ3RoID0gQUlVdGlscy5zdHJlbmd0aChvd25l ZC5nZXRVbml0cygpLmdldFVuaXRzKCksIGZhbHNlLCBmYWxzZSwgZGF0YSk7IAogICAgICAgICAg ICAgICAgICAgIGlmKCBUZXJyaXRvcnlBdHRhY2htZW50LmdldChvd25lZCkgIT0gbnVsbCAmJgog ICAgICAgICAgICAgICAgICAgICAgICBUZXJyaXRvcnlBdHRhY2htZW50LmdldChvd25lZCkuaXND YXBpdGFsKCkgJiYgCi0gICAgICAgICAgICAgICAgICAgICAgIChVdGlscy5nZXRTdHJlbmd0aE9m UG90ZW50aWFsQXR0YWNrZXJzKG93bmVkLCBnZXRQbGF5ZXJCcmlkZ2UoKS5nZXRHYW1lRGF0YSgp KSA+Ci0gICAgICAgICAgICAgICAgICAgICAgIEFJVXRpbHMuc3RyZW5ndGgob3duZWQuZ2V0VW5p dHMoKS5nZXRVbml0cygpLCBmYWxzZSwgZmFsc2UpKQorICAgICAgICAgICAgICAgICAgICAgICAo IHBvdGVudGlhbEVuZW15QXR0YWNrU3RyZW5ndGggPiBvdXJEZWZlbmNlU3RyZW5ndGggICkKICAg ICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAg ICAgICAgICBkb250TW92ZUZyb20uYWRkKG93bmVkKTsKICAgICAgICAgICAgICAgICAgICAgICAg Y29udGludWU7CiAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAKLSAg ICAgICAgICAgICAgICAgICBvdXJTdHJlbmd0aCArPSBBSVV0aWxzLnN0cmVuZ3RoKG93bmVkLmdl dFVuaXRzKCkuZ2V0TWF0Y2hlcyhhdHRhY2thYmxlKSwgdHJ1ZSwgZmFsc2UpOworICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgLy9EZXRlcm1p bmUgd2hpY2ggb2Ygb3VyIHVuaXRzIGNhbiBhdHRhY2sgZnJvbSB0aGUgdGVycml0b3J5ICdvd25l ZCcKKyAgICAgICAgICAgICAgICAgICBmaW5hbCBDb2xsZWN0aW9uPFVuaXQ+IHVuaXRzV2hpY2hD YW5BdHRhY2sgPSBVdGlscy5nZXRVbml0c1doaWNoQ2FuQXR0YWNrKG93bmVkLmdldFVuaXRzKCku Z2V0TWF0Y2hlcyhhdHRhY2thYmxlKSwgdHJ1ZSwgb3duZWQsIGVuZW15LCBwbGF5ZXIsIGRhdGEp OworICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgIGZvcihVbml0IHVuaXRD YW4gOiB1bml0c1doaWNoQ2FuQXR0YWNrKQorICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAg ICAgICAgICAJICAgZm9yKFVuaXQgdW5pdE1vdmVkIDogdW5pdHNBbHJlYWR5TW92ZWQpCisgICAg ICAgICAgICAgICAgICAJICAgeworICAgICAgICAgICAgICAgIAkJICAgaWYodW5pdENhbi5lcXVh bHModW5pdE1vdmVkKSkKKyAgICAgICAgICAgICAgICAJCSAgIHsKKyAgICAgICAgICAgICAgICAJ CQkgICB1bml0c1doaWNoQ2FuQXR0YWNrLnJlbW92ZSh1bml0Q2FuKTsKKyAgICAgICAgICAgICAg ICAJCSAgIH0KKyAgICAgICAgICAgICAgICAgIAkgICB9CisgICAgICAgICAgICAgICAgICAgfQor ICAgICAgICAgICAgIAkgICAKKyAgICAgICAgICAgICAgICAgICBmb3IoVW5pdCB0aGVVbml0IDog dW5pdHNXaGljaENhbkF0dGFjaykKKyAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg ICAgCSAgIGFsbFVuaXRzV2hpY2hDYW5BdHRhY2tGcm9tVGhpc1RlcnJpdG9yeS5hZGQodGhlVW5p dCk7CisgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAg ICAgICAgICAgb3VyU3RyZW5ndGggKz0gQUlVdGlscy5zdHJlbmd0aChhbGxVbml0c1doaWNoQ2Fu QXR0YWNrRnJvbVRoaXNUZXJyaXRvcnksIHRydWUsIGZhbHNlLCBkYXRhKTsKKyAgICAgICAgICAg ICAgICAgICAKKyAgICAgICAgICAgICAgICAgICBmb3IoVW5pdCB0aGVVbml0IDogYWxsVW5pdHNX aGljaENhbkF0dGFja0Zyb21UaGlzVGVycml0b3J5KQorICAgICAgICAgICAgICAgICAgIHsKKyAg ICAgICAgICAgICAgICAJICAgYWxsVW5pdHNXaGljaENhbkF0dGFjay5hZGQodGhlVW5pdCk7Cisg ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAg IH0KICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAvL3ByZXZlbnRzIDIgaW5mYW50 cnkgZnJvbSBhdHRhY2tpbmcgMSBpbmZhbnRyeQotICAgICAgICAgICAgICAgIGlmKG91clN0cmVu Z3RoID4gMS4zNyAqIGVuZW15U3RyZW5ndGgpCisKKyAgICAgICAgICAgICAgICAKKyAgICAgICAg ICAgICAgICAvL1RPRE86IFdoZW4gYXR0YWNraW5nLCB0YWtlIGF0IGxlYXN0IDEgZ3JvdW5kIHVu aXQuCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgLy9EZWNpZGUgd2hpY2ggdGVy cml0b3JpZXMgdG8gYXR0YWNrCisgICAgICAgICAgICAgICAgaWYob3VyU3RyZW5ndGggPiAxLjIw ICogZW5lbXlTdHJlbmd0aCkgLy8yIGluZmFudHJ5IG11c3Qgbm90IGF0dGFjayAxIGluZmFudHJ5 LgogICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgLy9kZXRlcm1pbmUgcG90 ZW50aWFsIGVuZW15IGNvdW50ZXItYXR0YWNrIHN0cmVuZ3RoLCBhbmQKKyAgICAgICAgICAgICAg ICAgICAgLy9vdXIgc3RyZW5ndGggYWZ0ZXIgdGhlIGJhdHRsZQorICAgICAgICAgICAgICAgICAg ICBDb2xsZWN0aW9uPFVuaXQ+IGVuZW15Q291bnRlckF0dGFja1VuaXRzID0gVXRpbHMuZ2V0UG90 ZW50aWFsQXR0YWNrZXJzKGVuZW15LCBwbGF5ZXIsIGRhdGEpOworICAgICAgICAgICAgICAgICAg ICBDb2xsZWN0aW9uPFVuaXQ+IGVuZW15VW5pdHNPblRhcmdldFRlcnJpdG9yeSA9IGVuZW15Lmdl dFVuaXRzKCkuZ2V0VW5pdHMoKTsKKyAgICAgICAgICAgICAgICAgICAgZW5lbXlDb3VudGVyQXR0 YWNrVW5pdHMucmVtb3ZlQWxsKGVuZW15VW5pdHNPblRhcmdldFRlcnJpdG9yeSk7CisgICAgICAg ICAgICAgICAgICAgIGZpbmFsIGRvdWJsZSBlbmVteUNvdW50ZXJBdHRhY2tTdHJlbmd0aCA9IEFJ VXRpbHMuc3RyZW5ndGgoZW5lbXlDb3VudGVyQXR0YWNrVW5pdHMsIHRydWUsIGZhbHNlLCBkYXRh KTsKKyAgICAgICAgICAgICAgICAgICAgZmluYWwgaW50IGVuZW15Q291bnRlckF0dGFja051bWJl cnMgPSBuZXcgQXJyYXlMaXN0PFVuaXQ+KGVuZW15Q291bnRlckF0dGFja1VuaXRzKS5zaXplKCk7 CisKKyAgICAgICAgICAgICAgICAgICAgZmluYWwgZG91YmxlIG91ckNvdW50ZXJBdHRhY2tEZWZl bmNlU3RyZW5ndGggPSBBSVV0aWxzLnN0cmVuZ3RoKGFsbFVuaXRzV2hpY2hDYW5BdHRhY2ssIGZh bHNlLCBmYWxzZSwgZGF0YSk7CisgICAgICAgICAgICAgICAgICAgIGZpbmFsIGludCBvdXJDb3Vu dGVyQXR0YWNrRGVmZW5jZVN0cmVuZ3RoTnVtYmVycyA9IG5ldyBBcnJheUxpc3Q8VW5pdD4oYWxs VW5pdHNXaGljaENhbkF0dGFjaykuc2l6ZSgpOworICAgICAgICAgICAgICAgICAgIAorICAgICAg ICAgICAgICAgICAgICAvL1RPRE86IHdoZW4gYXR0YWNraW5nIHR3byBhZGphY2VudCB0ZXJyaXRv cmllcywgdGhvc2UgdGVycml0b3J5J3MgCisgICAgICAgICAgICAgICAgICAgIC8vZW5lbXkgdW5p dHMgc2hvdWxkIG5vdCBiZSBjb3VudGVkIHdoZW4gY2FsY3VsYXRpbmcgZW5lbXkgCisgICAgICAg ICAgICAgICAgICAgIC8vY291bnRlci1hdHRhY2sgc3RyZW5ndGgsIG90aGVyd2lzZSB0aGV5IGFy ZSBjb3VudGVkIHR3aWNlLgogICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAg ICAgLy90aGlzIGlzIGFsbCB3ZSBuZWVkIHRvIHRha2UgaXQsIGRvbnQgZ28gb3ZlcmJvYXJkLCBz aW5jZSB3ZSBtYXkgYmUgYWJsZSB0byB1c2UgdGhlIHVuaXRzIHRvIGF0dGFjayBzb21ld2hlcmUg ZWxzZQotICAgICAgICAgICAgICAgICAgICBkb3VibGUgcmVtYWluaW5nU3RyZW5ndGhOZWVkZWQg PSAoMi41ICogZW5lbXlTdHJlbmd0aCkgKyA0OwotICAgICAgICAgICAgICAgICAgICBmb3IoVGVy cml0b3J5IG93bmVkIDogYXR0YWNrRnJvbSApCisgICAgICAgICAgICAgIAkgICAgICAgICAgICAg ICAgICAgIAorICAgICAgICAgICAgICAgICAgICAvL2xldCB0aGUgZW5lbXkgaGF2ZSBhIHZlcnkg c2xpZ2h0IGNvdW50ZXItYXR0YWNrIGFkdmFudGFnZS4KKyAgICAgICAgICAgICAgICAgICAgLy93 ZSBkb24ndCBuZWVkIHRvIGJlIHRvbyBvdmVybHkgY2F1dGlvdXMKKyAgICAgICAgICAgICAgICAg ICAgLy90aGlzIGNhbiBiZSB0d2Vha2VkIHRvIG1ha2UgcGxheSBtb3JlIGFnZ3Jlc3NpdmUgb3Ig Y2F1dGlvdXMKKyAgICAgICAgICAgICAgICAJaWYob3VyQ291bnRlckF0dGFja0RlZmVuY2VTdHJl bmd0aCA+PSAwLjkwICogZW5lbXlDb3VudGVyQXR0YWNrU3RyZW5ndGgpCiAgICAgICAgICAgICAg ICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmKGRvbnRNb3ZlRnJvbS5jb250YWlu cyhvd25lZCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAg ICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgIExpc3Q8VW5pdD4gdW5p dHMgPSBvd25lZC5nZXRVbml0cygpLmdldE1hdGNoZXMoYXR0YWNrYWJsZSk7CisgICAgICAgICAg ICAgICAgICAgICAgICAvL3RoaXMgaXMgYWxsIHdlIG5lZWQgdG8gdGFrZSBpdCwgZG9udCBnbyBv dmVyYm9hcmQsIAorICAgICAgICAgICAgICAgICAgICAgICAgLy9zaW5jZSB3ZSBtYXkgYmUgYWJs ZSB0byB1c2UgdGhlIHVuaXRzIHRvIGF0dGFjayBzb21ld2hlcmUgZWxzZQorICAgICAgICAgICAg ICAgICAgICAgICAgZG91YmxlIGF0dGFja1N0cmVuZ3RoTmVlZGVkID0gKDEuMjAgKiBlbmVteVN0 cmVuZ3RoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSBjb3VudGVyQXR0YWNrRGVm ZW5jZU5lZWRlZCA9ICgxLjIwICogZW5lbXlDb3VudGVyQXR0YWNrU3RyZW5ndGgpOworICAgICAg ICAgICAgICAgIAkJCisgICAgICAgICAgICAgICAgICAgICAgICBmb3IoVGVycml0b3J5IG93bmVk IDogYXR0YWNrRnJvbSApCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgaWYoZG9udE1vdmVGcm9tLmNvbnRhaW5zKG93bmVkKSkKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlzdDxVbml0PiB1bml0cyA9IG93 bmVkLmdldFVuaXRzKCkuZ2V0TWF0Y2hlcyhhdHRhY2thYmxlKTsKKyAgICAgICAgICAgICAgICAg ICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb2xsZWN0aW9uPFVuaXQ+IHVu aXRzQ2FuQXR0YWNrRnJvbVRlcnJpdG9yeSA9IG5ldyBIYXNoU2V0PFVuaXQ+KCk7CisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgZm9yKFVuaXQgdGhlVW5pdCA6IHVuaXRzKXsKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgZm9yKFVuaXQgdW5pdENhbkF0dGFjayA6IGFsbFVuaXRz V2hpY2hDYW5BdHRhY2spCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsJCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhlVW5pdC5lcXVhbHModW5pdENh bkF0dGFjaykpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ICAKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgCSAgICB1bml0c0NhbkF0dGFja0Zyb21UZXJyaXRv cnkuYWRkKHRoZVVuaXQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgfQkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL1RPRE86IHRoZXJl IGFyZSBzb21lIHNpdHVhdGlvbnMgd2hlcmUgeW91IHdhbnQgdG8gY29tbWl0IGFsbCBmb3JjZXMK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL3N1Y2ggYXMgbGFyZ2UsIGRlY2lzaXZlIGJh dHRsZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL1BhcmUgZG93biB1bml0c0NhbkF0dGFj a0Zyb21UZXJyaXRvcnkgd2hlbiB3ZSBkZWNpZGUgaG93IG1hbnkgdW5pdHMgdG8gdGFrZSB3aXRo IG9uIHRoZSBhdHRhY2suCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYob3duZWQuaXNX YXRlcigpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgLy90YWtlIGFsbCBwb3NzaWJsZSB1bml0cyBpZiBpdCBpcyBhbiBhbXBo aWJpb3VzIGF0dGFjaworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICBlbHNlIGlmKGRhdGEuZ2V0TWFwKCkuZ2V0TmVpZ2hib3JzKG93bmVk LCBNYXRjaGVzLnRlcnJpdG9yeUhhc0VuZW15TGFuZFVuaXRzKHBsYXllciwgZGF0YSkpLnNpemUo KSA+IDEgICkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIC8vU2luY2Ugd2UgY2FuIHBvdGVudGlhbGx5IGF0dGFjayBhbm90aGVy IHRlcnJpdG9yeSwgdGFrZSBvbmx5IHRoZSB1bml0cyB3ZSBuZWVkIAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB1bml0c0NhbkF0dGFja0Zyb21UZXJyaXRvcnkgPSBVdGlscy5nZXRP dXJVbml0c1VwVG9TdHJlbmd0aChhdHRhY2tTdHJlbmd0aE5lZWRlZCwgY291bnRlckF0dGFja0Rl ZmVuY2VOZWVkZWQsIHVuaXRzQ2FuQXR0YWNrRnJvbVRlcnJpdG9yeSwgZmFsc2UsIGRhdGEpOwor ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICBlbHNlIGlmKGRhdGEuZ2V0TWFwKCkuZ2V0TmVpZ2hib3JzKG93bmVkLCBNYXRjaGVzLnRlcnJp dG9yeUhhc0VuZW15TGFuZFVuaXRzKHBsYXllciwgZGF0YSkpLnNpemUoKSA8PSAxICApCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAvL3Rha2UgYWxsIHBvc3NpYmxlIHVuaXRzIGlmIHRoZXJlIGlzIG9ubHkgb25lIChvciBubykg bmVpZ2hib3JpbmcgZW5lbXkgdGVycml0b3J5CSAgICAgICAgICAgICAgICAgICAgICAgIAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBl bHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAvL3Rha2Ugbm8gYWRkaXRpb25hbCB1bml0cworICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB1bml0c0NhbkF0dGFja0Zyb21UZXJyaXRvcnkgPSBuZXcgQXJyYXlMaXN0 PFVuaXQ+KCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCSAgICAgICAgICAg ICAgICAgICAgICAgIGF0dGFja1N0cmVuZ3RoTmVlZGVkIC09IEFJVXRpbHMuc3RyZW5ndGgodW5p dHNDYW5BdHRhY2tGcm9tVGVycml0b3J5LCB0cnVlLCBmYWxzZSwgZGF0YSk7CisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgY291bnRlckF0dGFja0RlZmVuY2VOZWVkZWQgLT0gQUlVdGlscy5z dHJlbmd0aCh1bml0c0NhbkF0dGFja0Zyb21UZXJyaXRvcnksIGZhbHNlLCBmYWxzZSwgZGF0YSk7 CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYodW5pdHNDYW5BdHRhY2tGcm9tVGVy cml0b3J5LnNpemUoKSA+IDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB1bml0c0FscmVhZHlNb3ZlZC5hZGRBbGwodW5pdHND YW5BdHRhY2tGcm9tVGVycml0b3J5KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg bW92ZVVuaXRzLmFkZCh1bml0c0NhbkF0dGFja0Zyb21UZXJyaXRvcnkpOworICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBtb3ZlUm91dGVzLmFkZChkYXRhLmdldE1hcCgpLmdldFJvdXRl KG93bmVkLCBlbmVteSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAg ICAgICAgICAgICAgLy9vbmx5IHRha2UgdGhlIHVuaXRzIHdlIG5lZWQgaWYgCi0gICAgICAgICAg ICAgICAgICAgICAgICAvLzEpIHdlIGFyZSBub3QgYW4gYW1waGliaW91cyBhdHRhY2sKLSAgICAg ICAgICAgICAgICAgICAgICAgIC8vMikgd2UgY2FuIHBvdGVudGlhbGx5IGF0dGFjayBhbm90aGVy IHRlcnJpdG9yeQotICAgICAgICAgICAgICAgICAgICAgICAgaWYoIW93bmVkLmlzV2F0ZXIoKSAm JiBkYXRhLmdldE1hcCgpLmdldE5laWdoYm9ycyhvd25lZCwgTWF0Y2hlcy50ZXJyaXRvcnlIYXNF bmVteUxhbmRVbml0cyhwbGF5ZXIsIGRhdGEpKS5zaXplKCkgPiAxICApCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgdW5pdHMgPSBVdGlscy5nZXRVbml0c1VwVG9TdHJlbmd0aChyZW1haW5p bmdTdHJlbmd0aE5lZWRlZCwgdW5pdHMsIHRydWUsIGZhbHNlKTsKKwkgICAgICAgICAgICAgICAg ICAgIHNfbG9nZ2VyLmZpbmUoIkF0dGFja2luZyA6ICIgKyBlbmVteSArICIgb3VyIHN0cmVuZ3Ro OiAiICsgc3RyZW5ndGhGb3JtYXQuZm9ybWF0KG91clN0cmVuZ3RoKSArICIgZW5lbXkgc3RyZW5n dGg6ICIgKyBzdHJlbmd0aEZvcm1hdC5mb3JtYXQoZW5lbXlTdHJlbmd0aCkgKyAiIHJlbWFpbmlu ZyBzdHJlbmd0aCBuZWVkZWQ6ICIgKyBzdHJlbmd0aEZvcm1hdC5mb3JtYXQoYXR0YWNrU3RyZW5n dGhOZWVkZWQgKSArICIgJiAiICsgc3RyZW5ndGhGb3JtYXQuZm9ybWF0KGNvdW50ZXJBdHRhY2tE ZWZlbmNlTmVlZGVkKSAKKwkgICAgICAgICAgICAgICAgICAgIAkJKyAiIGVuZW15Y291bnRlcmF0 dGFjazogIiArIHN0cmVuZ3RoRm9ybWF0LmZvcm1hdChlbmVteUNvdW50ZXJBdHRhY2tTdHJlbmd0 aCkgKyAib3VyZGVmZW5jZWFmdGVyYmF0dGxlIiArIHN0cmVuZ3RoRm9ybWF0LmZvcm1hdChvdXJD b3VudGVyQXR0YWNrRGVmZW5jZVN0cmVuZ3RoICkgCisJICAgICAgICAgICAgICAgICAgICAJCSsg IiBjb3VudGVyYXR0YWNrQ09VTlQ6ICIgKyBlbmVteUNvdW50ZXJBdHRhY2tOdW1iZXJzICsgIiBv dXJkZWZlbmNlQ09VTlQ6ICIgKyBvdXJDb3VudGVyQXR0YWNrRGVmZW5jZVN0cmVuZ3RoTnVtYmVy cyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgIHJl bWFpbmluZ1N0cmVuZ3RoTmVlZGVkIC09IEFJVXRpbHMuc3RyZW5ndGgodW5pdHMsIHRydWUsIGZh bHNlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAg aWYodW5pdHMuc2l6ZSgpID4gMCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICB1bml0c0FscmVhZHlNb3ZlZC5hZGRBbGwodW5pdHMpOwotICAg ICAgICAgICAgICAgICAgICAgICAgICAgIG1vdmVVbml0cy5hZGQodW5pdHMpOwotICAgICAgICAg ICAgICAgICAgICAgICAgICAgIG1vdmVSb3V0ZXMuYWRkKGRhdGEuZ2V0TWFwKCkuZ2V0Um91dGUo b3duZWQsIGVuZW15KSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg ICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIHNfbG9n Z2VyLmZpbmUoIkF0dGFja2luZyA6ICIgKyBlbmVteSArICIgb3VyIHN0cmVuZ3RoOiIgKyBvdXJT dHJlbmd0aCArICIgZW5lbXkgc3RyZW5ndGgiICsgZW5lbXlTdHJlbmd0aCArICIgcmVtYWluaW5n IHN0cmVuZ3RoIG5lZWRlZCAiICsgcmVtYWluaW5nU3RyZW5ndGhOZWVkZWQpOworICAgICAgICAg ICAgICAgIAl9CisgICAgICAgICAgICAgICAgCWVsc2UKKyAgICAgICAgICAgICAgICAJeworICAg ICAgICAgICAgICAgIAkJc19sb2dnZXIuZmluZXIoIldlIGNhbid0IGF0dGFjazogIiArIGVuZW15 ICsgIiBvdXIgc3RyZW5ndGg6ICIgKyBzdHJlbmd0aEZvcm1hdC5mb3JtYXQob3VyU3RyZW5ndGgp ICsgIiBlbmVteSBzdHJlbmd0aDogIiArIHN0cmVuZ3RoRm9ybWF0LmZvcm1hdChlbmVteVN0cmVu Z3RoKSArICIgZW5lbXkgY291bnRlcmF0dGFjazogIiArIHN0cmVuZ3RoRm9ybWF0LmZvcm1hdChl bmVteUNvdW50ZXJBdHRhY2tTdHJlbmd0aCkgKyAiIGVuZW15IGNvdW50ZXJhdHRhY2sgc3RyZW5n dGggaXMgdG9vIGdyZWF0LiIpOworICAgICAgICAgICAgICAgIAl9CiAgICAgICAgICAgICAgICAg fQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg ICAgCXNfbG9nZ2VyLmZpbmVyKCJXZSBjYW4ndCBhdHRhY2sgOiAiICsgZW5lbXkgKyAiIG91ciBz dHJlbmd0aDogIiArIHN0cmVuZ3RoRm9ybWF0LmZvcm1hdChvdXJTdHJlbmd0aCkgKyAiIGVuZW15 IHN0cmVuZ3RoOiAiICsgc3RyZW5ndGhGb3JtYXQuZm9ybWF0KGVuZW15U3RyZW5ndGgpICsgIiBl bmVteSBzdHJlbmd0aCBpcyB0b28gZ3JlYXQuIik7CisgICAgICAgICAgICAgICAgfQogICAgICAg ICAgICAgICAgIAogICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZXsKKyAgICAgICAgICAg IAkvL25vIG5lZWQgdG8gYXR0YWNrIGVtcHR5IHRlcnJpdG9yeS4gV2UgbW9zdCBsaWtlbHkgYWxy ZWFkeSBzZW50IGEgdW5pdCB0byBjYXB0dXJlIGl0LgorICAgICAgICAgICAgCXNfbG9nZ2VyLmZp bmVzdCgiTm90IGF0dGFja2luZyIgKyBlbmVteSArICIuIEVuZW15IFN0cmVuZ3RoIGluIHRlcnJp dG9yeSBpczogIiArIHN0cmVuZ3RoRm9ybWF0LmZvcm1hdChlbmVteVN0cmVuZ3RoKSk7CisgICAg ICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgfQpAQCAtOTg1LDkgKzExMTAsMTEg QEAKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgUmVzb3VyY2UgaXBjcyA9IGRhdGEuZ2V0 UmVzb3VyY2VMaXN0KCkuZ2V0UmVzb3VyY2UoQ29uc3RhbnRzLklQQ1MpOwotCisgICAgICAgIGZp bmFsIGludCB0b3RhbFByb2R1Y3Rpb24gPSBnZXRQcm9kdWN0aW9uKHBsYXllciwgZGF0YSk7CiAg ICAgICAgIGludCBsZWZ0VG9TcGVuZCA9IHBsYXllci5nZXRSZXNvdXJjZXMoKS5nZXRRdWFudGl0 eShpcGNzICk7CiAgICAgICAgIAorICAgICAgICAvLyBhc3N1bWUgeW91IGNhbiBmaXQgMiBvZiB0 aGUgY2hlYXBlc3QgdW5pdCwgd2hpY2ggY29zdHMgMyAgICAgICAgCisgICAgICAgIGZpbmFsIGlu dCBtYXhUcmFuc3BvcnRzTmVlZGVkID0gKGludCkgKHRvdGFsUHJvZHVjdGlvbiAvIDYuMCk7CiAg ICAgICAgIAogICAgICAgICBMaXN0PFByb2R1Y3Rpb25SdWxlPiBydWxlcyA9IHBsYXllci5nZXRQ cm9kdWN0aW9uRnJvbnRpZXIoKS5nZXRSdWxlcygpOwogICAgICAgICBJbnRlZ2VyTWFwPFByb2R1 Y3Rpb25SdWxlPiBwdXJjaGFzZSA9IG5ldyBJbnRlZ2VyTWFwPFByb2R1Y3Rpb25SdWxlPigpOwpA QCAtMTAyNywxMiArMTE1NCwxNSBAQAogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAg IC8vZ2l2ZSBhIHByZWZlcmVuZSB0byBjaGVhcCB1bml0cywgYW5kIHRvIHRyYW5zcG9ydHMKICAg ICAgICAgICAgICAgICAvL2J1dCBkb250IGdvIG92ZXJib2FyZCB3aXRoIGJ1eWluZyB0cmFuc3Bv cnRzCisKICAgICAgICAgICAgICAgICBpbnQgZ29vZE51bWJlck9mVHJhbnNwb3J0cyA9IDA7CiAg ICAgICAgICAgICAgICAgYm9vbGVhbiBpc1RyYW5zcG9ydCA9IHRyYW5zcG9ydENhcGFjaXR5ID4g MDsKICAgICAgICAgICAgICAgICBpZihhbXBoaWJSb3V0ZSAhPSBudWxsKQogICAgICAgICAgICAg ICAgIHsKICAgICAgICAgICAgICAgICAJLy8gMjUlIHRyYW5zcG9ydHMgLSBjYW4gYmUgbW9yZSBp ZiBmcm9udGllciBpcyBmYXIgYXdheQorICAgICAgICAgICAgICAgICAgICAvL2FuZCBkb24ndCBi dXkgbW9yZSB0cmFuc3BvcnRzIHRoYW4gd2UgaGF2ZSBpbmR1c3RyaWFsIGNhcGFjaXR5IHRvIGJ1 aWxkLgogICAgICAgICAgICAgICAgICAgICBnb29kTnVtYmVyT2ZUcmFuc3BvcnRzID0gKGludCkg KGxhbmRVbml0Q291bnQgLzQpOworICAgICAgICAgICAgICAgICAgICBnb29kTnVtYmVyT2ZUcmFu c3BvcnRzID0gTWF0aC5taW4oZ29vZE51bWJlck9mVHJhbnNwb3J0cywgbWF4VHJhbnNwb3J0c05l ZWRlZCk7CiAgICAgICAgICAgICAgICAgICAgIC8vIGJvb3N0IGZvciB0cmFuc3BvcnQgcHJvZHVj dGlvbgogICAgICAgICAgICAgICAgIAlpZihpc1RyYW5zcG9ydCAmJiBkZWZVbml0c0F0QW1waWJS b3V0ZSA+IGdvb2ROdW1iZXJPZlRyYW5zcG9ydHMKICAgICAgICAgICAgICAgICAJCQkmJiBsYW5k VW5pdENvdW50ID4gZGVmVW5pdHNBdEFtcGliUm91dGUKQEAgLTEwNDYsNyArMTE3Niw3IEBACiAg ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGJvb2xl YW4gYnV5QmVjYXVzZVRyYW5zcG9ydCA9IChNYXRoLnJhbmRvbSgpIDwgMC43ICYmIHRyYW5zcG9y dENvdW50IDwgZ29vZE51bWJlck9mVHJhbnNwb3J0cykgfHwgTWF0aC5yYW5kb20oKSA8IDAuMTAg OwotICAgICAgICAgICAgICAgIGJvb2xlYW4gZG9udEJ1eUJlY2F1c2VUb29NYW55VHJhbnNwb3J0 cyA9IHRyYW5zcG9ydENvdW50ID4gMiAqIGdvb2ROdW1iZXJPZlRyYW5zcG9ydHM7CisgICAgICAg ICAgICAgICAgYm9vbGVhbiBkb250QnV5QmVjYXVzZVRvb01hbnlUcmFuc3BvcnRzID0gdHJhbnNw b3J0Q291bnQgPiBnb29kTnVtYmVyT2ZUcmFuc3BvcnRzOwogICAgICAgICAgICAgICAgIAogICAg ICAgICAgICAgICAgIGlmKCAgKCFpc1RyYW5zcG9ydCAmJiBNYXRoLnJhbmRvbSgpICogY29zdCA8 IDIpICB8fAogICAgICAgICAgICAgICAgICAgICAgKGlzVHJhbnNwb3J0ICYmIGJ1eUJlY2F1c2VU cmFuc3BvcnQgJiYgIWRvbnRCdXlCZWNhdXNlVG9vTWFueVRyYW5zcG9ydHMpICApCkBAIC0xMjgz LDQgKzE0MTMsMzkgQEAKICAgICAJCX0KICAgICAgICAgfTsKICAgICB9CisgICAgCisgICAgLy8g Y29waWVkIGZyb20gU3RhdFBhbmVsCisgICAgcHJpdmF0ZSBpbnQgZ2V0UHJvZHVjdGlvbihQbGF5 ZXJJRCBwbGF5ZXIsIEdhbWVEYXRhIGRhdGEpCisgICAgeworICAgICAgICBpbnQgclZhbCA9IDA7 IAorICAgICAgICBJdGVyYXRvcjxUZXJyaXRvcnk+IGl0ZXIgPSBkYXRhLmdldE1hcCgpLmdldFRl cnJpdG9yaWVzKCkuaXRlcmF0b3IoKTsKKyAgICAgICAgd2hpbGUgKGl0ZXIuaGFzTmV4dCgpKQor ICAgICAgICB7CisgICAgICAgICAgICBib29sZWFuIGlzQ29udm95T3JMYW5kID0gZmFsc2U7IAor ICAgICAgICAgICAgVGVycml0b3J5IHBsYWNlID0gKFRlcnJpdG9yeSkgaXRlci5uZXh0KCk7Cisg ICAgICAgICAgICBPcmlnaW5hbE93bmVyVHJhY2tlciBvcmlnT3duZXJUcmFja2VyID0gbmV3IE9y aWdpbmFsT3duZXJUcmFja2VyKCk7CisgICAgICAgICAgICBUZXJyaXRvcnlBdHRhY2htZW50IHRh ID0gVGVycml0b3J5QXR0YWNobWVudC5nZXQocGxhY2UpOworCisgICAgICAgICAgICBpZighcGxh Y2UuaXNXYXRlcigpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlzQ29udm95T3JM YW5kID0gdHJ1ZTsKKyAgICAgICAgICAgIH0gCisgICAgICAgICAgICBlbHNlIGlmKHBsYWNlLmlz V2F0ZXIoKSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgdGEgIT0gbnVsbCAmJgorICAgICAg ICAgICAgICAgICAgICAgICAgb3JpZ093bmVyVHJhY2tlci5nZXRPcmlnaW5hbE93bmVyKHBsYWNl KSAhPSBQbGF5ZXJJRC5OVUxMX1BMQVlFUklEICYmCisgICAgICAgICAgICAgICAgICAgICAgICBv cmlnT3duZXJUcmFja2VyLmdldE9yaWdpbmFsT3duZXIocGxhY2UpID09IHBsYXllciAmJgorICAg ICAgICAgICAgICAgICAgICAgICAgcGxhY2UuZ2V0T3duZXIoKS5lcXVhbHMocGxheWVyKSkKKyAg ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpc0NvbnZveU9yTGFuZCA9IHRydWU7IAorICAg ICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBpZihwbGFjZS5nZXRPd25lcigp LmVxdWFscyhwbGF5ZXIpICYmIGlzQ29udm95T3JMYW5kKQorICAgICAgICAgICAgeworICAgICAg ICAgICAgICAgIGlmKHRhICE9IG51bGwpCisgICAgICAgICAgICAgICAgICAgIHJWYWwgKz0gdGEu Z2V0UHJvZHVjdGlvbigpOyAKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICB9 CisgICAgICAgIHJldHVybiByVmFsOworICAgIH0KIH0KSW5kZXg6IHNyYy9nYW1lcy9zdHJhdGVn eS9lbmdpbmUvZGF0YS9HYW1lTWFwLmphdmEKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gc3JjL2dhbWVzL3N0cmF0 ZWd5L2VuZ2luZS9kYXRhL0dhbWVNYXAuamF2YQkocmV2aXNpb24gMTk2MSkKKysrIHNyYy9nYW1l cy9zdHJhdGVneS9lbmdpbmUvZGF0YS9HYW1lTWFwLmphdmEJKHdvcmtpbmcgY29weSkKQEAgLTE3 Niw3ICsxNzYsNDUgQEAKIAkJcmV0dXJuIHBhc3NlZDsKIAl9CiAKKwkvKioKKwkgKiBUaGlzIGlz IHVzZWQgc28gdGhlIEFJIGNhbiBzZWUgbW9yZSB0aGFuIDEgem9uZSBkZWVwIGZvciBzcGVjaWZp YyB0ZXJyaXRvcnkgY29uZGl0aW9ucy4KKwkgKi8KKwlAU3VwcHJlc3NXYXJuaW5ncygidW5jaGVj a2VkIikKKwlwdWJsaWMgU2V0PFRlcnJpdG9yeT4gZ2V0TmVpZ2hib3JzKFRlcnJpdG9yeSB0LCBN YXRjaDxUZXJyaXRvcnk+IGNvbmQsIGludCBkaXN0YW5jZSkKKwl7CisJCWlmKGNvbmQgPT0gbnVs bCkKKwkJCXJldHVybiBnZXROZWlnaGJvcnModCwgZGlzdGFuY2UpOworCQkKKwkJaWYoZGlzdGFu Y2UgPCAwKQorCQkJdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiRGlzdGFuY2Ug bXVzdCBiZSBwb3NpdGl2ZSBub3Q6IiArIGRpc3RhbmNlKTsKIAorCQlpZihkaXN0YW5jZSA9PSAw KQorCQkJcmV0dXJuIENvbGxlY3Rpb25zLkVNUFRZX1NFVDsKKworCQlTZXQ8VGVycml0b3J5PiBz dGFydCA9IGdldE5laWdoYm9ycyh0KTsKKworCQlpZihkaXN0YW5jZSA9PSAxKQorCQkJcmV0dXJu IHN0YXJ0OworCisJCVNldDxUZXJyaXRvcnk+IG5laWdoYm9ycyA9ICBnZXROZWlnaGJvcnMoc3Rh cnQsIG5ldyBIYXNoU2V0PFRlcnJpdG9yeT4oc3RhcnQpLCAtLWRpc3RhbmNlKTsJCQorCQluZWln aGJvcnMucmVtb3ZlKHQpOworCisJCVNldDxUZXJyaXRvcnk+IHBvc3NpYmxlID0gbmVpZ2hib3Jz OworCQlTZXQ8VGVycml0b3J5PiBwYXNzZWQgPSBuZXcgSGFzaFNldDxUZXJyaXRvcnk+KCk7CisJ CUl0ZXJhdG9yPFRlcnJpdG9yeT4gaXRlciA9IHBvc3NpYmxlLml0ZXJhdG9yKCk7CisJCXdoaWxl KGl0ZXIuaGFzTmV4dCgpKQorCQl7CisJCQlUZXJyaXRvcnkgY3VycmVudCA9IGl0ZXIubmV4dCgp OworCQkJaWYoY29uZC5tYXRjaChjdXJyZW50KSkKKwkJCXsKKwkJCQlwYXNzZWQuYWRkKGN1cnJl bnQpOworCQkJfQorCQl9CisJCQorCisJCXJldHVybiBwYXNzZWQ7CisJfQorCiAJLyoqCiAJICog UmV0dXJucyBhbGwgdGVycml0b3JpZXMgd2l0aGluIGRpc3RhbmNlIGZyb20KIAkgKiB0ZXJyaXRv cnksIGV4Y2x1ZGluZyB0aGUgdGVycml0b3J5IGl0c2VsZi4K |