LyoKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIENvcHlyaWdodCCpIHsxOTk5fSwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogICBEYXRlICAgICAgICBOYW1lICAgICAgICBEZXNjcmlwdGlvbgoqICAgMTEvMTcvOTkgICAgYWxpdSAgICAgICAgQ3JlYXRpb24uCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKi8KI2lmbmRlZiBVTklSQU5HRV9ICiNkZWZpbmUgVU5JUkFOR0VfSAoKI2luY2x1ZGUgInVuaWNvZGUvdXR5cGVzLmgiCgpjbGFzcyBVbmljb2RlU3RyaW5nOwoKLyoqCiAqICUlJSBJTlRFUk5BTCBDTEFTUyBVU0VEIEJZIFJ1bGVCYXNlZFRyYW5zbGl0ZXJhdG9yICUlJQogKgogKiBBIHJhbmdlIG9mIFVuaWNvZGUgY2hhcmFjdGVycy4gIFN1cHBvcnQgdGhlIG9wZXJhdGlvbnMgb2YgdGVzdGluZyBmb3IKICogaW5jbHVzaW9uIChkb2VzIHRoaXMgcmFuZ2UgY29udGFpbiB0aGlzIGNoYXJhY3Rlcj8pIGFuZCBzcGxpdHRpbmcuCiAqIFNwbGl0dGluZyBpbnZvbHZlcyBicmVha2luZyBhIHJhbmdlIGludG8gdHdvIHNtYWxsZXIgcmFuZ2VzIGFyb3VuZCBhCiAqIGNoYXJhY3RlciBpbnNpZGUgdGhlIG9yaWdpbmFsIHJhbmdlLiAgVGhlIHNwbGl0IGNoYXJhY3RlciBpcyBub3QgaW5jbHVkZWQKICogaW4gZWl0aGVyIHJhbmdlLiAgSWYgdGhlIHNwbGl0IGNoYXJhY3RlciBpcyBhdCBlaXRoZXIgZXh0cmVtZSBlbmQgb2YgdGhlCiAqIHJhbmdlLCBvbmUgb2YgdGhlIHNwbGl0IHByb2R1Y3RzIGlzIGFuIGVtcHR5IHJhbmdlLgogKgogKiBUaGlzIGNsYXNzIGlzIHVzZWQgaW50ZXJuYWxseSB0byBkZXRlcm1pbmUgdGhlIGxhcmdlc3QgYXZhaWxhYmxlIHByaXZhdGUKICogdXNlIGNoYXJhY3RlciByYW5nZSBmb3IgdmFyaWFibGUgc3RhbmQtaW5zLgogKi8KY2xhc3MgVW5pY29kZVJhbmdlIHsKCnB1YmxpYzoKCiAgICBVQ2hhciBzdGFydDsKCiAgICBpbnQzMl90IGxlbmd0aDsKCiAgICBVbmljb2RlUmFuZ2UoVUNoYXIgc3RhcnQsIGludDMyX3QgbGVuZ3RoKTsKCiAgICAvKioKICAgICAqIENBTExFUiBPV05TIFJFU1VMVC4KICAgICAqLwogICAgVW5pY29kZVJhbmdlKiBjbG9uZSgpIGNvbnN0OwoKICAgIGJvb2xfdCBjb250YWlucyhVQ2hhciBjKSBjb25zdDsKCiAgICAvKioKICAgICAqIEFzc3VtZSB0aGF0IGNvbnRhaW5zKGMpIGlzIHRydWUuICBTcGxpdCB0aGlzIHJhbmdlIGludG8gdHdvIG5ldwogICAgICogcmFuZ2VzIGFyb3VuZCB0aGUgY2hhcmFjdGVyIGMuICBNYWtlIHRoaXMgcmFuZ2Ugb25lIG9mIHRoZSBuZXcgcmFuZ2VzCiAgICAgKiAobW9kaWZ5IGl0IGluIHBsYWNlKSBhbmQgcmV0dXJuIHRoZSBvdGhlciBuZXcgcmFuZ2UuICBUaGUgY2hhcmFjdGVyCiAgICAgKiBpdHNlbGYgaXMgbm90IGluY2x1ZGVkIGluIGVpdGhlciByYW5nZS4gIElmIHRoZSBzcGxpdCByZXN1bHRzIGluIGFuCiAgICAgKiBlbXB0eSByYW5nZSAodGhhdCBpcywgaWYgYyA9PSBzdGFydCBvciBjID09IHN0YXJ0ICsgbGVuZ3RoIC0gMSkgdGhlbgogICAgICogcmV0dXJuIG51bGwuCiAgICAgKgogICAgICogTU9ESUZJRVMgVEhJUyBSQU5HRSBJTiBQTEFDRS4KICAgICAqCiAgICAgKiBDQUxMRVIgT1dOUyBSRVNVTFQuCiAgICAgKi8KICAgIFVuaWNvZGVSYW5nZSogc3BsaXQoVUNoYXIgYyk7CgogICAgLyoqCiAgICAgKiBGaW5kcyB0aGUgbGFyZ2VzdCBzdWJyYW5nZSBvZiB0aGlzIHJhbmdlIHRoYXQgaXMgdW51c2VkIGJ5IHRoZQogICAgICogZ2l2ZW4gc3RyaW5nLiAgQSBzdWJyYW5nZSBpcyB1bnVzZWQgYnkgYSBzdHJpbmcgaWYgdGhlIHN0cmluZwogICAgICogY29udGFpbnMgbm8gY2hhcmFjdGVycyBpbiB0aGF0IHJhbmdlLiAgSWYgdGhlIGdpdmVuIHN0cmluZwogICAgICogY29udGFpbnMgbm8gY2hhcmFjdGVycyBpbiB0aGlzIHJhbmdlLCB0aGVuIHRoaXMgcmFuZ2UgaXRzZWxmIGlzCiAgICAgKiByZXR1cm5lZC4KICAgICAqCiAgICAgKiBDQUxMRVIgT1dOUyBSRVNVTFQuCiAgICAgKi8KICAgIFVuaWNvZGVSYW5nZSogbGFyZ2VzdFVudXNlZFN1YnJhbmdlKGNvbnN0IFVuaWNvZGVTdHJpbmcmIHN0cikgY29uc3Q7Cgpwcml2YXRlOgoKICAgIC8vIEZvciBVVmVjdG9yIG9mIFVuaWNvZGVSYW5nZSogb2JqZWN0cwogICAgc3RhdGljIHZvaWQgZGVsZXRlcih2b2lkKik7Cgp9OwoKI2VuZGlmCg==